Shortest recursive solution, super clear
Please upvote if you like it:\ncsharp\npublic int MaxLength(IList<string> arr, int i = 0, string s = "")\n{\n\tif (s.Distinct().Count() < s.Length) return 0;\n\
Please upvote if you like it:\n```csharp\npublic int MaxLength(IList<string> arr, int i = 0, string s = "")\n{\n\tif (s.Distinct().Count() < s.Length) return 0;\n\n\tif (arr.Count == i) return s.Length;\n\n\treturn Math.Max(\n\t\tMaxLength(arr, i + 1, s),\n\t\tMaxLength(arr, i + 1, s + arr[i])\n\t);\n}\n```\n\nAnd of course, we can put it all on one line, although we really shouldn\'t:\n```csharp\npublic int MaxLength(IList<string> arr, int i = 0, string s = "") =>\n\ts.Distinct().Count() < s.Length ? 0 : arr.Count == i ? s.Length : Math.Max(MaxLength(arr, i + 1, s), MaxLength(arr, i + 1, s + arr[i]));\n```
['Recursion', 'C#']