2017-05-15 44 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); 
相关问题