题目:给定一个字符串s,你可以从中删除一些字符,使得剩下的串是一个回文串。如何删除才能使得回文串最长呢?
输出需要删除的字符个数
输入:输入数据有多组,每组包含一个字符串s,且保证:1<=s.length<=1000.
输出:对于每组数据,输出一个整数,代表最少需要删除的字符个数。
案例输入:
abcda google
输出:
2 2
解答:
public class huiwenchuan{
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
while(sc.hasNext()){
String s1=sc.next();
String s2=new StringBuilder(s1).reverse().toString();
int dp[][]=new int[s1.length()+1][s2.length()+1];
for(int i=1;i<dp.length;i++){
for(int j=1;j<dp[0].length;j++){
dp[i][j] = s1.charAt(i - 1) == s2.charAt(j - 1) ?
dp[i - 1][j - 1] + 1
: Math.max(dp[i - 1][j], dp[i][j - 1]);
}
}
System.out.println(s1.length() - dp[s1.length()][s2.length()]);
}
}
}
关于其中的动态规划问题思路来自于文本比较算法
参考如下博客:https://www.cnblogs.com/grenet/archive/2010/06/03/1750454.html
最长回文子序列
1381

被折叠的 条评论
为什么被折叠?



