Java Solution explained with comment
\npublic static int maxLength(List<String> arr) {\n        int len = 0;\n        for (int i = 0; i < arr.size(); i++) { // this loop check whether i\'th string 
```\npublic static int maxLength(List<String> arr) {\n        int len = 0;\n        for (int i = 0; i < arr.size(); i++) { // this loop check whether i\'th string itself has repeating char\n            HashSet<Character> seen = new HashSet<>();\n            boolean has = true;\n            for (char c : arr.get(i).toCharArray()) {\n                if (seen.contains(c)) {\n                    has = false;\n                    break;\n                }\n                seen.add(c);\n            }\n            if (!has)// if it\'s has repeating char continue to next i\n                continue;\n\n            len = Math.max(len, seen.size());\n            for (int j = 0; j < arr.size(); j++) { // this loop check with all other strings in arr\n                has = true;\n                if (i == j) continue;\n                HashSet<Character> data = new HashSet<>();\n                for (char c : arr.get(j).toCharArray()) {\n                    if (seen.contains(c) || data.contains(c)) {\n                        has = false;\n                        break;\n                    }\n                    data.add(c);\n                }\n                if (has) { // if everthing is diff then concat it to i\'th string\n                    seen.addAll(data);\n                }\n                len = Math.max(len, seen.size());// always check if there is update in it \n            }\n       \n```\n\nHope you will understand :P
[]