JAVA || RECURSION
Steps:\n1. This is a standard Take and Not take Recursion Problem.\n2. At each instance when the index reaches the list size, we need to check whether the soFar
Steps:\n1. This is a standard **Take** and **Not take** Recursion Problem.\n2. At each instance when the index reaches the list size, we need to check whether the **soFar** string formed is Valid or not(Check its Uniqueness);\n3. Return the Max of Take and Not Take.\n```\nclass Solution {\n    public int maxLength(List<String> arr) {\n        return solve(arr, 0, "");\n    }\n    \n    \n    public int solve(List<String> arr, int i, String soFar)\n    {\n        if(i == arr.size())\n        {\n            if(isValid(soFar))\n            {\n                return soFar.length();\n            }\n            return 0;\n        }\n        \n        int size1 = solve(arr, i+1, soFar);\n        int size2 = solve(arr, i+1, soFar+arr.get(i));\n        \n        return Math.max(size1, size2);\n\n    }\n    \n    \n    public boolean isValid(String s)\n    {\n        int[] freq = new int[26];\n        \n        for(int i=0;i<s.length();i++)\n        {\n            int val = s.charAt(i) - \'a\';\n            freq[val]++;\n            \n            if(freq[val]>1)\n            {\n                return false;\n            }\n        }\n        \n        return true;\n    }\n}\n```\n
['Recursion', 'Java']