1.题目
2.题解
2.1例题剖析
例题:s1:ab 与 s2:ab,的最大公共子串;
2.2代码展示
package 刷题记录;
public class 最大公共子串_422 {
static int f(String s1, String s2)
{
char[] c1 = s1.toCharArray();
char[] c2 = s2.toCharArray();
//1.这是为什么要长度加1呢?
//因为要在c1[0]与c2[0]加一个单位的空子串。不懂后面有图可以再理解一下
int[][] a = new int[c1.length+1][c2.length+1];
int max = 0;
//2.为什么是从1开始呢?
//是因为 空子串与任何单位子串 都是0,所以空子串的行和列这两行都是0。不懂后面有图可以再理解一下
for(int i=1; i<a.length; i++){
for(int j=1; j<a[i].length; j++){
if(c1[i-1]==c2[j-1]) {
//3.重点是理解这句代码,
//就是c1[i-1]==c2[j-1]时,a[i][j] = a[i-1][j-1] + 1;
a[i][j] = a[i-1][j-1] + 1;
if(a[i][j] > max) max = a[i][j];
}
}
}
return max;
}
public static void main(String[] args){
int n = f("abcdkkk", "baabcdadabc");
System.out.println(n);
System.out.println(f("aaakkkabababa", "baabababcdadabc"));
System.out.println(f("abccbaacbcca", "ccccbbbbbaaaa"));
System.out.println(f("abcd", "xyz"));
System.out.println(f("ab", "ab"));
}
}
3.总结
求最大公共子串,就是当c1[i-1]==c2[j-1]时,a[i][j] = a[i-1][j-1] + 1;其他情况不用管。
4.期望
每天精研五题,择一与你分享,期待与你共同探讨。文章若有错漏,恳请批评指正,共同进步。