计算字符串C#中所有子字符串的出现次数

时间:2016-06-17 10:56:17

标签: c# string multithreading substring

问题:我有一个长字符串,我需要查找该字符串下所有子字符串的出现次数,并打印所有子字符串的列表及其计数(如果count为> 1),按降序排列计数。

示例:

String = "abcdabcd"

结果:

Substrings      Count
abcd            2
abc             2
bcd             2
ab              2
bc              2
cd              2
a               2
b               2
c               2
d               2

问题:我的字符串长度可达5000个字符,我无法找到实现此目的的有效方法。(效率对于应用非常重要)

是否存在任何算法或通过多线程可以实现。请帮忙。

1 个答案:

答案 0 :(得分:0)

使用示例:Find a common string within a list of strings

void Main()
{
    "abcdabcd".getAllSubstrings()
        .AsParallel()
        .GroupBy(x => x)
        .Select(g => new {g.Key, count=g.Count()})
        .Dump();
}

// Define other methods and classes here

public static class Ext
{
    public static IEnumerable<string> getAllSubstrings(this string word)
    {
        return from charIndex1 in Enumerable.Range(0, word.Length)
           from charIndex2 in Enumerable.Range(0, word.Length - charIndex1 + 1)
           where charIndex2 > 0
           select word.Substring(charIndex1, charIndex2);
    }
}

产地:

a 2 
dabc 1 
abcdabc 1 
b 2 
abc 2 
dabcd 1 
bc 2 
bcda 1 
abcd 2 
ab 2 
bcdab 1 
cdabc 1 
abcda 1 
d 2 
bcdabc 1 
dab 1 
bcd 2 
abcdab 1 
c 2 
bcdabcd 1 
abcdabcd 1 
cd 2 
da 1 
cdab 1 
cda 1 
cdabcd 1