假设有两个字符串分别是s1和s2,求出两个字符串的最长公共子串长度。
例如:s1=aesdwwqddf,str2=awsdwwqdde,那么s1和s2的最长公共子串为sdwwqdd,最长公共子串长度为7。
程序代码
public class CommonStr {
public static void main(String[] args) {
CommonStr lss = new CommonStr();
String s1 = "aesdwwqddf", s2 = "awsdwwqdde";
int len = lss.getCommonStrLength(s1, s2);
System.out.println("最长公共子串长度为:" + len);
}
public int getCommonStrLength(String s1, String s2) {
s1 = s1.toLowerCase();
s2 = s2.toLowerCase();
int len1 = s1.length(), len2 = s2.length();
String min = null;
String max = null;
String target = null;
min = len1 <= len2 ? s1 : s2;
max = len1 > len2 ? s1 : s2;
for (int i = min.length(); i >= 1; i--) {
for (int j = 0; j <= min.length() - i; j++) {
target = min.substring(j, j + i);
for (int k = 0; k <= max.length() - i; k++) {
if (max.substring(k, k + i).equals(target)) {
return i;
}
}
}
}
return 0;
}
}
输出结果
最长公共子串长度为:7
更多面试微信搜索公众号Java精选,或者扫描下方二维码,内涵3000+道初级、中级、高级面试题,大厂面试题,架构面试题。回复Java面试,获取资料。