private static int recursion(char[] charsA, char[] charsB, int i, int j) {
int iMax = charsA.length - 1;
int jMax = charsB.length - 1;
三种递归结束条件
i,j都到达了字符串末尾
if(i== iMax && j==jMax){
return charsA[i]==charsB[j]?1:0;
}
i到达了字符串末尾,只有j能加1了
if(i==iMax){
if(charsA[i] == charsB[j]){
return 1;
}else {
return recursion(charsA,charsB,i,j+1);
}
}
j到达了字符串末尾,只有i才能往后移动了
if(j==jMax){
if(charsA[i] == charsB[j]){
return 1;
}else {
return recursion(charsA,charsB,i+1,j);
}
}
普遍情况:i和j都没有到达字符串末尾
跳过j位置,让i位置和j+1位置的字符比较
int p1 = recursion(charsA,charsB,i,j+1);
跳过i位置
int p2 = recursion(charsA,charsB,i+1,j);
比较i位置和j位置的字符
如果相等,结果加1,继续比较i+1和j+1
如果不等,该情况可转化为上面两种情况,直接赋值为0
赋值0保证了p3不会超过p1/p2
int p3 = charsA[i]==charsB[j]?(1+recursion(charsA,charsB,i+1,j+1)):0;
return Math.max(p1,Math.max(p2,p3));
}