2017-05-15 42 views
0

你好,我很難在我的代碼中進行這種改編。目前它可以識別重複的單詞,但重複的字符序列又如何呢?如何查找字符串中的所有重複字符序列?

例如,如果用戶輸入:剩下的就是測試

程序將輸出:最常見​​的:「EST」(但我不能得到這個工作)

,或者如果用戶輸入:同樣的遊戲

程序將輸出:最常見​​的「詩情」

它必須是區分大小寫(「XY不能被視爲相同的XY或XY」)。這裏是我當前的代碼:

string words; 
    Console.WriteLine("Input string:"); 
    words = Console.ReadLine(); 
    var results = words.Split(' ').Where(x => x.Length > 3) 
            .GroupBy(x => x) 
            .Select(x => new { Count = x.Count(), Word = x.Key }) 
            .OrderByDescending(x => x.Count); 

    foreach (var item in results) 


    Console.WriteLine(String.Format("{0} occured {1} times", item.Word, item.Count)); 
    Console.WriteLine("Most common = " + results.First()); 
    Console.WriteLine("Least common = "+ results.Last()); 
+1

你有上面只有代碼通過對空間和羣體分裂那些。你能否展示你的嘗試來識別字符串?它出什麼問題了?這聽起來像一個家庭作業...... –

+3

你是什麼意思的字符序列?對長度有任何約束?爲什麼輸入「其餘的測試」不會像最常見的那樣返回「t」? – Mockingbird

+0

你的子串應該有多少個字符? – FSm

回答

2

拆分成詞,假設最小長度爲3個字符,發現最常見的則最長公共序列:

var results = words.Split(' ') 
        .SelectMany(w => Enumerable.Range(3, Math.Max(0, w.Length - 2)).Select(n => w.Substring(w.Length - n, n))) 
        .GroupBy(pw => pw) 
        .Select(pwg => new { Common = pwg.Key, Count = pwg.Count() }) 
        .OrderByDescending(cc => cc.Count) 
        .ThenByDescending(cc => cc.Common.Length) 
        .Take(1); 
相關問題