我正在使用这段Java代码来查找类似的字符串:
if( str1.indexof(str2) >= 0 || str2.indexof(str1) >= 0 ) .......
但使用str1 = "pizzabase"
和str2 = "namedpizzaowl"
则不起作用。
答案 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。