我有一个字符串数组。
部分字符串相似(例如,人类似于 twolegperson ,动物类似于 animalgold )。
我想找到重复次数超过1次的字符串(此处人,动物)。
非常感谢你 法蒂
答案 0 :(得分:1)
您需要Generalized Suffix Tree。有关实施,请参阅this question。
答案 1 :(得分:0)
朴素伪代码算法:
int minMatchLen = 3; // The minimum length of string match required
string stringArray[] = {"person", "twolegperson", "animal", "animalgold"}
for (i = 0; i < stringArray.length, i++) {
int strLen = stringArray[i].length;
for (substrIndex = 0; substrIndex < strLen - minMatchLen; substrIndex++) {
for (substrLen = minMatchLen; substrLen < strLen - substrIndex; substrLen++) {
string subString = stringArray[i].substr(substrIndex, substrLen);
bool matchFound = false;
for (j = i + 1; j < stringArray.length; j++) {
if stringArray[j].contains(subString) {
print("String '" + subString + "' found in '" + stringArray[j] + "'");
matchFound = true;
}
}
if (matchFound) print(""String '" + subString + "' found in '" + stringArray[i] + "'");
}
}
}
这基本上遍历数组中的每个字符串,在指定的最小长度上提取所有可能的子字符串,然后在数组的其余部分中搜索字符串以查找这些子字符串。我相信有更优雅和有效的解决方案,但这将完成工作。但是,对于大型阵列来说,它可能会很慢。