我想找到重复超过1次的字符串

时间:2010-10-25 05:05:25

标签: string arraylist

我有一个字符串数组。

部分字符串相似(例如,类似于 twolegperson 动物类似于 animalgold )。

我想找到重复次数超过1次的字符串(此处动物)。

非常感谢你 法蒂

2 个答案:

答案 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] + "'");
        }
    }
}             

这基本上遍历数组中的每个字符串,在指定的最小长度上提取所有可能的子字符串,然后在数组的其余部分中搜索字符串以查找这些子字符串。我相信有更优雅和有效的解决方案,但这将完成工作。但是,对于大型阵列来说,它可能会很慢。