您的位置:首页 > 其它

腾讯笔试题 构造回文字符串。

2018-02-21 23:21 232 查看
给定一个字符串s,你可以从中删除一些字符,使得剩下的串是一个回文串。如何删除才能使得回文串最长呢?
输出需要删除的字符个数。

输入描述:
输入数据有多组,每组包含一个字符串s,且保证:1<=s.length<=1000.
输出描述:
对于每组数据,输出一个整数,代表最少需要删除的字符个数。
输入例子1:
abcda
google

输出例子1:
2
2

解决方式:

1、保存s字符串。2、再保存其rs相反的字符串3、对其求最长公共序列数 ->其结果就是回文字符串。




代码:

import java.util.Scanner;
public class Main{
private static int JdHw  (String s1) {
if (s1.length() < 1 || s1.length() > 1000) {
System.out.println("参数错误,请输入字符量范围1-1000之间的字符串");
return -1 ;
}
int len = s1.length();
String s2 = new StringBuffer(s1).reverse().toString();
int[][] data1 = new int[len+1][len+1];
for (int i = 1; i < len+1 ; i++) {
for (int j = 1; j < len+1; j++) {
if (s1.charAt(i-1) == s2.charAt(j-1)) {
data1[i][j] = data1[i-1][j-1]+1;
} else if (data1[i - 1][j] >= data1[i][j - 1]) {
data1[i][j] = data1[i - 1][j];
} else {
data1[i][j] = data1[i][j-1];
}
}
}
return len-data1[len][len];
}

public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNext()) {
String str = scanner.next();
System.out.println(JdHw(str));
}
}
}

运行测试:

google
2
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: