private void WordBreak(int pos) { if (dict.ContainsKey(pos)) { return; } var result = new List <string>(); for (int i = pos; i < s.Length; ++i) { var cad = s.Substring(pos, i - pos + 1); if (trie.ContainsWord(cad)) { if (i == s.Length - 1) { result.Add(cad); } else { WordBreak(i + 1); if (dict.ContainsKey(i + 1) && dict[i + 1].Count > 0) { result.AddRange(dict[i + 1].Select(ii => string.Format("{0} {1}", cad, ii))); } } } } dict[pos] = result; }