状态方程
-
- dp[i][j] = dp[i - 1][j - 1] + 1; 当str1[i - 1] == str2[j - 1]
-
- dp[i][j] = Math.max(dp[i - 1][j],dp[i][j - 1]); str1[i - 1] != str2[j - 1] 边界条件: dp二维数组的第0行所有元素都为0,第0列所有元素为0
let lines = [];
while (line = readline()){
lines.push(line.trim().split(' ')) //得到字符串数组
}
let len1 = +lines[0][0];
let len2 = +lines[0][1];
let str1 = lines[1].join(' ');
let str2 = lines[2].join(' ');
let dp = new Array(len1 + 1);
for(let i = 0; i < len1 + 1; i++){
dp[i] = new Array(len2 + 1)
}
//边界条件:
for(let i = 0; i < dp.length; i++){
dp[i][0] = 0;
}
for(let j = 0; j < dp[0].length; j++){
dp[0][j] = 0;
}
function findLongest (str1,str2) {
for (let i = 1; i < dp.length; i++){
for (let j = 1; j < dp[0].length; j++){
if(str1[i - 1] == str2[j - 1]){
dp[i][j] = dp[i - 1][j - 1] + 1;
}else{
dp[i][j] = Math.max(dp[i - 1][j],dp[i][j - 1]);
}
}
}
console.log(dp[len1][len2])
}
findLongest (str1,str2)