逆向顺序
句子:大家好我叫XX我是一名程序员
程序员 -> 序员 -> 员
名程序 -> 程序 -> 序
一名程 -> 名程 -> 程
是一名 -> 一名 -> 名
我是一 -> 是一 -> 一
X我是 -> 我是 -> 是
XX我 -> X我 -> 我
叫XX -> XX -> X
我叫X -> 叫X -> X
好我叫 -> 我叫 -> 叫
家好我 -> 好我 -> 我
大家好 -> 家好 -> 好
大家 -> 家
大
class Program { public static HashSet<string> dictionary = new HashSet<string>(); static void Main(string[] args) { Initail(); List<string> list = new List<string>(); string s = "大家好我叫XX我是一名程序员"; string[] sentences = s.Split(','); int max = 3; for (int i = 0; i < sentences.Length; i++) { string str = sentences[i]; int start = sentences[i].Length - max; int len = sentences[i].Length - start; while (len > 0) { string subWord = sentences[i].Substring((start < 0 ? 0 : start), len); Console.WriteLine(subWord); if (Search(subWord)) { list.Add(subWord); start = start - max; if (start < 0) { len = start < 0 ? max + start : max; } } else { int k = 1; bool flag = false; string tempWord = null; for (; k <= subWord.Length - 1; k++) { tempWord = subWord.Substring(k); Console.WriteLine(tempWord); if (Search(tempWord)) { flag = true; list.Add(tempWord); break; } } if (flag) { start = start - tempWord.Length; } else { start--; } len = start < 0 ? max + start : max; } } } foreach (string x in list) { Console.WriteLine(x); } Console.ReadKey(); } public static void Initail() { dictionary.Add("大家"); dictionary.Add("好"); dictionary.Add("我"); dictionary.Add("一名"); dictionary.Add("程序员"); dictionary.Add("nick"); } public static bool Search(string word) { return dictionary.Contains(word); } }