" " . , "" " " "". , ?
, , . .
- , , LCS, . , . , . n, O (n), O (n) , O (n ^ 2), . ( , O (n ^ 3) O (n ^ 2).) (.. , "bbbb" "bb", "bbb",), , . #:
public static string FindDuplicateSubstring(string s,
bool allowOverlap = false)
{
int matchPos = 0, maxLength = 0;
for (int shift = 1; shift < s.Length; shift++) {
int matchCount = 0;
for (int i = 0; i < s.Length - shift; i++) {
if (s[i] == s[i+shift]) {
matchCount++;
if (matchCount > maxLength) {
maxLength = matchCount;
matchPos = i-matchCount+1;
}
if (!allowOverlap && (matchCount == shift)) {
break;
}
} else matchCount = 0;
}
}
if (maxLength > 0) return s.Substring(matchPos, maxLength);
else return null;
}
, . 3000, 15 , 60 ( ).