找出重复2次或更多次的最长子串

时间:2013-03-06 19:57:41

标签: algorithm

我只想编写逻辑来检查给定字符串的最长子字符串,该字符串重复2次或超过2次

前 -           string str = aabbcaaaaaaaabbcaaabbccaabddaab

      To find out Longest substring which repeated 2 or more times.

      output:  aabbcaa

2 个答案:

答案 0 :(得分:2)

为了有效地做到这一点,你应该研究尝试。

这是指向tutorial on using tries的链接。特别是前缀树。

答案 1 :(得分:0)

这是一个简单(但效率低下)的算法:循环所有可能的子串长度,从最大值下降到1.对于每个长度,将该长度的所有子串放入字典中。如果发现重复,请停止。它必须是最大的一个。这是相应的C#代码:

public static string FindDuplicateSubstring(string s)
    {
        for (int len = s.Length-1; len > 0; len--) {
            var dict = new Dictionary<string, int>();
            for (int i = 0; i <= s.Length - len; i++) {
                string sub = s.Substring(i, len);
                if (dict.ContainsKey(sub)) return sub;
                else dict[sub] = i;
            }
        }
        return null;
    }

例如,当应用于问题的文本时,最长的重复子字符串是“实现”。注意,允许重叠的子串,即输入“bbbb”返回“bbb”。您的问题不清楚是否要排除重叠案例。有关更快的方法,请参阅我的其他答案。

good example. here

我必须首先对ArrayList进行排序然后我将联系人[i]与联系人[i-1]进行比较

contacts.Sort();


for (int i=1; i <= contacts.Count-1; i++)
{
Console.WriteLine(contacts[ i ]);
Console.WriteLine(contacts[ i-1] );
if(contacts[ i ].ToString() == contacts[ i-1 ].ToString())
{
Console.WriteLine("Duplicate: "+contacts[ i ]);
}
}