[code]import java.util.HashSet;
import java.util.Set;
public class StringTest {
public static void main(String[] args) {
String str1 = "abcdadfkjflsjlfsjfl";
String str2 = "abcefsfsfsjsdfjfl";
Set<String> results = GetMaxSubString(str1, str2);
for (String result : results) {
System.out.println(result);
}
}
public static Set<String> GetMaxSubString(String s1, String s2) {
Set<String> results = new HashSet<String>();
// 用来保存查找出来的最大字串.
String max;
String min;
int maxLen = 0;
// 用来记录最大字串的长度.
max = (s1.length() > s2.length()) ? s1 : s2;
min = (max == s1) ? s2 : s1;
for (int i = 0; i < min.length(); i++) {
for (int y = 0, z = min.length() - i; z != min.length() + 1; y++, z++) {
String temp = min.substring(y, z);
if (max.contains(temp)) {
if ((z - y) > maxLen) {
// z-y得到的就是当前字串的长度,
// 如果当前字串的长度大于保存在results里面的字串的长度,
// 那么就把results里面的字串清空,重新开始记录当前的字串.
maxLen = z - y;
results.clear();
results.add(temp);
} else if ((z - y) == maxLen) {
// 如果查找到得字串和results里面的字串长度一样,
// 那么则将当前字串添加到results当中.
results.add(temp);
}
}
}
if (!results.isEmpty()) {
// 当results不为空的时候,就说明已经找到了所有的最大字串.
// 因为这个程序是从min长度的字符串向一个长度的字符串查找的.
// 所以第一次匹配的字符串,就是最大长度的字串.
break;
}
}
return results;
}
}[/code]上面是我对开始程序的的一个改进,不知道是不是你想要的结果。 |