To find out Longest substring which repeated 2 or more time
我只是想编写逻辑来检查给定字符串的最长子字符串,该字符串重复 2 次或 2 次以上
前-
字符串 str = aabbcaaaaaaaabbcaaabbccaabddaab
1 2 3 | To find out Longest substring which repeated 2 or more times. output: aabbcaa |
为了有效地执行此操作,您应该考虑尝试。
这里是一个关于使用尝试的教程的链接。特别是前缀树。
这是一个简单(但效率低下)的算法:循环所有可能的子字符串长度,从最大值到 1。对于每个长度,将该长度的所有子字符串放入字典中。如果发现重复,请停止。它应该是最大的一个。下面是对应的 C# 代码:
1 2 3 4 5 6 7 8 9 10 11 12 | 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; } |
例如,当应用于问题的文本时,最长重复的子字符串是"implementation"。请注意,允许重叠子字符串,即输入 "bbbb" 返回 "bbb"。如果您想排除重叠案例,您的问题并不清楚。如需更快的方法,请参阅我的其他答案。
或
很好的例子。这里
我必须先对 ArrayList 进行排序,然后比较 ontacts[ i ] 和 contacts[ i-1 ]
1 2 3 4 5 6 7 8 9 10 11 12 | 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 ]); } } |