Simple Java Backtracking Solution
\tint max = 0;\n    public int maxLength(List arr) {\n        int[] count = new int[256];\n        backtracking(arr,count,0,"");\n        return max;\n    }\n  
\tint max = 0;\n    public int maxLength(List<String> arr) {\n        int[] count = new int[256];\n        backtracking(arr,count,0,"");\n        return max;\n    }\n    \n    private void backtracking(List<String> arr, int[] count, int index, String str){\n        if(index == count.length) return;\n        for(int i = index; i < arr.size(); i++){\n            char[] array = arr.get(i).toCharArray();\n            boolean foundDuplicate = false;\n            for(int k = 0; k < array.length; k++){\n                char c = array[k];\n                if(count[(int)c] == 1){\n                    for(int j = 0; j < k; j++){\n                        count[(int)(array[j])]--;\n                    }\n                    foundDuplicate = true;\n                    break;\n                }\n                count[(int)c]++;\n            }\n            if(!foundDuplicate){\n                max = Math.max(max,str.length()+array.length);\n                backtracking(arr,count,i+1,str+arr.get(i));\n                for(char c : array){\n                    count[(int)c]--;\n                }\n            }\n        }\n    }
[]