从两个字符串中查找类似子字符串的方法

时间:2010-08-18 05:18:09

标签: java similarity

我正在使用这段Java代码来查找类似的字符串:

if( str1.indexof(str2) >= 0 || str2.indexof(str1) >= 0 ) .......

但使用str1 = "pizzabase"str2 = "namedpizzaowl"则不起作用。

如何找到常见的子串,即“披萨”?

2 个答案:

答案 0 :(得分:2)

str1中的每个字母进行迭代,检查它是否存在于str2中。如果它不存在,则转到下一个字母,如果是,则将str1中您在str2中检查的子字符串的长度增加到两个字符,并重复直到不再匹配找到或者您已遍历str1

这将找到所有共享的子串,但是 - 就像冒泡排序 - 几乎不是最佳的,而是一个如何解决问题的一个非常基本的例子。

像这样的伪示例:

pos = 0
len = 1
matches = [];

while (pos < str1.length()) {

    while (str2.indexOf(str1.substring(pos, len))) {
       len++;
    }

    matches.push(str1.substring(pos, len - 1));
    pos++;
    len = 1;
}

答案 1 :(得分:0)

如果你的算法说两个字符串在包含一个公共子字符串时是相似的,那么这个算法将总是返回true;空字符串""通常是每个字符串的子字符串。确定字符串之间相似性的更有意义,并返回一个数字而不是布尔值。

这是确定字符串(或更一般地说,序列)相似性的好算法:http://en.wikipedia.org/wiki/Levenshtein_distance