Easy Java Solution || Recursion || Backtracking
\n1. First Approach :- BruteForce Approach\nStep1 :- generate all subsequences\nstep2 :- check each subsequences has unique character or not\nstep3 :- maintain 
```\n1. First Approach :- BruteForce Approach\nStep1 :- generate all subsequences\nstep2 :- check each subsequences has unique character or not\nstep3 :- maintain max variable for length of each subsequence which has unique character\nclass Solution {\n    public int maxLength(List<String> arr) {\n        List<String> temp = new ArrayList();\n        List<String> store = new ArrayList();\n        getSubsequence(arr,0,store,temp);\n\n        return maxLen(store,0);\n    }\n    void getSubsequence(List<String> arr, int index,List<String> store,List<String> temp){\n        if(index==arr.size()){\n            String sum = "";\n            for(String s:temp){\n                sum+=s;\n            }\n            store.add(sum);\n            return;\n        }\n        //include\n        temp.add(arr.get(index));\n        getSubsequence(arr,index+1,store,temp);\n        \n        //exclude\n        temp.remove(temp.size()-1);\n        getSubsequence(arr,index+1,store,temp);\n        \n    }\n    int maxLen(List<String> store, int max){\n        int map[] = new int[26];\n         for(int i=0; i<store.size(); i++){\n            if(getMax(store.get(i),map)){\n                String p = store.get(i);\n                max = Math.max(max,p.length());\n            }\n        }\n        return max;\n    }\n    boolean getMax(String string, int[] map){\n        map = new int[26];\n        for(int i=0; i<string.length(); i++){\n            if(map[string.charAt(i)-\'a\']==1)return false;\n            else\n                map[string.charAt(i)-\'a\'] = 1;\n        }\n        return true;\n    }\n}\nT.C :- 2^n(for generating subsequences) * k(max length of subsequence i.e. loop for adding each string e.g. un+iq+ue)  + 2^n(checking each subsequnce for unique character) * k(max length of subsequence)\n      \n2. Second Approach :- removing extra O(2^n * k) we are not first generating all subsequence this time\nclass Solution {\n    public int maxLength(List<String> arr) {\n        \n        int visited[] = new int[26];\n        return helper(arr,visited,0,0);\n    }\n    \n    boolean checking(int[] visited, String CurrentString)\n    {\n        \n        //self check for current string having repeated character or not\n        int[] self = new int[26];\n        for(int i=0; i<CurrentString.length(); i++)\n        {\n            if(self[CurrentString.charAt(i)-\'a\']==1)\n                return false;\n            self[CurrentString.charAt(i)-\'a\'] = 1;\n        }\n        \n        //for checking character of Current string is present in previous String or not\n        for(int i=0; i<CurrentString.length(); i++)\n        {\n            if(visited[CurrentString.charAt(i)-\'a\']==1)\n                return false;\n        }\n        return true;\n    }\n    \n    \n    int helper(List<String> arr,int[] visited,int index,int length)\n    {\n          if(index==arr.size())\n            return length;\n        \n        String CurrentString = arr.get(index);\n        \n//checking current string each character is previously contained or not if contain simply call for next string\n        if(!checking(visited,CurrentString))\n            return helper(arr,visited,index+1,length);\n//if current string\'s characters are not previously visited we have two option 1.pick this string for calculating length 2. not pick \n        else{\n            \n            //include\n            //first of all mark 1 in visited array for each character\n            for(int i=0; i<CurrentString.length(); i++)\n            {\n                visited[CurrentString.charAt(i)-\'a\'] = 1;\n            }\n            //add that current string length into length\n            length +=CurrentString.length();\n            //call recursion for remaining task\n            int ans1 = helper(arr,visited,index+1,length);\n            \n            //exclude\n            //undo all changes we made\n            for(int i=0; i<CurrentString.length(); i++)\n            {\n                visited[CurrentString.charAt(i)-\'a\'] = 0;\n            }\n            length-=CurrentString.length();\n            int ans2 = helper(arr,visited,index+1,length);\n            \n            return Math.max(ans1,ans2);\n            \n        }\n    }\n}\n\n```
['Backtracking', 'Recursion', 'Java']