public int MaxLength(IList <string> arr) { if (arr == null || arr.Count == 0) { return(0); } var filteredArray = arr.Where(x => x.Distinct().Count() == x.Length).ToArray(); if (filteredArray.Length == 0) { return(0); } int totalUniqueChars = filteredArray.SelectMany(x => x.ToCharArray()).Distinct().Count(); var soln = new SolnDS(); this.MaxLengthHelper(filteredArray, soln, totalUniqueChars); return(soln.maxLength); }
public void MaxLengthHelper(IList <string> currentArray, SolnDS soln, int TotalUniqueChars) { foreach (var item in currentArray) { if (soln.IsSafe(item)) { soln.Add(item); if (soln.maxLength == TotalUniqueChars) { return; } this.MaxLengthHelper(currentArray, soln, TotalUniqueChars); } // try next one. } // pop previous addition. soln.Remove(); }