给定一个字符串s,你可以从中删除一些字符,使得剩下的串是一个回文串。如何删除才能使得回文串最长呢?
输出需要删除的字符个数。
输出需要删除的字符个数。
输入描述:
输入数据有多组,每组包含一个字符串s,且保证:1<=s.length<=1000.
输出描述:
对于每组数据,输出一个整数,代表最少需要删除的字符个数。
输入例子1:
abcda google
输出例子1:
2 2
思路:保存字符串并保存该字符串的反转字符串,然后用最长公共子序列。
function huiwen(str){
//将字符串转化成数组,反转数组再将数组用join转成字符串
var s=str.split("").reverse().join("");
var len=s.length;
// 动态规划需要的表格(此处是二维数组)
var L=[];
for(var k=0;k<len+1;k++){
L[k]=new Array();
}
for (var i = 0; i < len + 1; i++) {
L[i][0]=0;
L[0][i]=0;
}
// 开始填表
for (var i = 1; i < len + 1; i++) {
for (var j = 1; j < len + 1; j++) {
if (s[i-1] == str[j - 1]) {
L[i][j] = L[i - 1][j - 1] + 1;
} else if (L[i - 1][j] >= L[i][j - 1]) {
L[i][j] = L[i - 1][j];
} else
L[i][j] = L[i][j - 1];
}
}
return len-L[len][len];
}
console.log(huiwen("abcda"))