腾讯笔试题 构造回文字符串。
2018-02-21 23:21
232 查看
给定一个字符串s,你可以从中删除一些字符,使得剩下的串是一个回文串。如何删除才能使得回文串最长呢?
输出需要删除的字符个数。
输入描述:输入数据有多组,每组包含一个字符串s,且保证:1<=s.length<=1000.
输出描述:对于每组数据,输出一个整数,代表最少需要删除的字符个数。
输入例子1:
输出例子1:
输出需要删除的字符个数。
输入描述:输入数据有多组,每组包含一个字符串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
相关文章推荐
- 腾讯笔试题 构造回文字符串
- 2016年腾讯笔试题之回文字符串
- 腾讯17年暑期实习生笔试题 - 构造回文
- 2016腾讯实习生笔试编程题:构造回文
- [2016腾讯暑期实习在线笔试题]最长回文字符串
- 腾讯笔试编程题:构造回文(C++)
- 算法编程题积累(3)——腾讯笔试"构造回文“问题
- JAVA动态规划(三)--最长回文字符串(可删除中间字符)【腾讯2016实习生笔试题】
- 可删除某些字符的最长回文字符串(2016腾讯在线笔试题)
- python字符串split(),join(),strip()函数及网易笔试 回文序列
- 2016 腾讯笔试题 最长回文字串(不连续)(dp)
- 2014百度校园招聘笔试——求一个字符串的最长回文子串
- 2016腾讯笔试题,删除字符串中的字符,使得剩下的字符串是回文串,如何删除使得回文串最长
- 腾讯面试题-回文构造
- 2014百度校园招聘笔试——求一个字符串的最长回文子串
- 腾讯2017暑假实习生编程题构造回文
- 给定数组a[N]构造数组b [N]——腾讯笔试
- 构造回文--腾讯2017暑期实习生编程题
- 腾讯 构造回文
- 腾讯2018暑期实习生招聘在线笔试之字符串操作