private static void recursiveWordsFit(List <string> wordsThatFit, bool isFirstCall = false) { foreach (var word in wordsThatFit) { if (isFirstCall) { anagram.Clear(); remainingText = sentence; } anagram.Add(word); string remainingTextBefore = new string(remainingText); bool remainingChar = true; foreach (var c in word) { int indexOfChar = remainingText.IndexOf(c); if (indexOfChar != -1) { remainingText = remainingText.Remove(indexOfChar, 1); } else { remainingChar = false; } } if (!remainingChar) { anagram.RemoveAt(anagram.Count - 1); remainingText = remainingTextBefore; continue; } wordsThatFitRemaining = AnagramSolver.SearchWordsThatFit(remainingText, wordsThatFit); if (wordsThatFitRemaining.Count > 0) { recursiveWordsFit(wordsThatFitRemaining); } else { if (remainingText == string.Empty) { string newAnagram = new string(anagram.OrderBy(f => f).Aggregate((i, j) => i + " " + j)); listAllAnagrams.Add(newAnagram); anagram.Clear(); remainingText = sentence; } else { anagram.RemoveAt(anagram.Count - 1); remainingText = remainingTextBefore; } } } }
public static List <string> GenerateAnagrams(string inputSentence) { listAllAnagrams.Clear(); sentence = Util.RemoveSpaceStringReader(inputSentence); remainingText = sentence; List <string> listValidWords = ReadFileTXT.ReadValidWordsFile(); List <string> wordsThatFit = AnagramSolver.SearchWordsThatFit(sentence, listValidWords); recursiveWordsFit(wordsThatFit, true); return(listAllAnagrams.OrderBy(f => f).Distinct().ToList()); }