[腾讯笔试]求一个字符串删除若干字符可构成一个回文串
来源:互联网 发布:量化投资中的算法理论 编辑:程序博客网 时间:2024/06/07 08:50
给定一个字符串s,你可以从中删除一些字符,使得剩下的串是一个回文串。如何删除才能使得回文串最长呢?
输出需要删除的字符个数。
输入描述: 输入数据有多组,每组包含一个字符串s,且保证:1<=s.length<=1000. 输出描述: 对于每组数据,输出一个整数,代表最少需要删除的字符个数。 输入例子: abcda google 输出例子: 2 2
思路:使用求最大公共子序列公式,将字符串反转,求反转字符串和原字符串的最大公共子序列,该序列不是连续的字符,构造一个二维数组,二维数组中的每个元素按照如下处理:
具体操作过程如下:
则arr[
package com.java.zuichanghuiwenchuan;import java.util.Scanner;public class Main { /* * 给定一个字符串s,你可以从中删除一些字符,使得剩下的串是一个回文串。如何删除才能使得回文串最长呢? 输出需要删除的字符个数。 输入描述: 输入数据有多组,每组包含一个字符串s,且保证:1<=s.length<=1000. 输出描述: 对于每组数据,输出一个整数,代表最少需要删除的字符个数。 输入例子: abcda google 输出例子: 2 2 ================================================================ 思路: 求最大子序列 用一个二维数组 restr 为 str的字符串反转 |--0 if i=0 or j=0 a[i][j] = |-- a[i-1][j-1]+1 if str[i]=restr[j] |-- max{arr[i-1][j],arr[i][j-1] if str[i] != restr[j] */ public static void main(String[] args) { Scanner in = new Scanner(System.in); while(in.hasNext()){ String str = in.nextLine(); System.out.println(solution(str)); } } private static int solution(String str) { String reStr = newStringBuffer(str).reverse().toString(); int len = str.length(); int[][] arr = new int[len+1][len+1]; for(int i = 0;i<len+1;i++){ arr[0][i] = arr[i][0] = 0; } for(int i = 1;i<len+1;i++){ for(int j = 1;j<len+1;j++){ if(str.charAt(i-1)==reStr.charAt(j-1)) arr[i][j] = arr[i-1][j-1]+1; else arr[i][j] = Math.max(arr[i][j-1],arr[i-1][j]); } } return len-arr[len][len]; }}
0 0
- [腾讯笔试]求一个字符串删除若干字符可构成一个回文串
- 可删除某些字符的最长回文字符串(2016腾讯在线笔试题)
- 一个字符串A的子串被定义成从A中顺次选出若干个字符构成的串。如A=“cdaad" ,顺次选1,3,5个字符就构成子串" cad" ,现给定两个字符串,求它们的最长共公子串。 小王对既是素数又是回文的
- JAVA动态规划(三)--最长回文字符串(可删除中间字符)【腾讯2016实习生笔试题】
- 409. Longest Palindrome (计算可由一个字符串中数字字符构成的最长回文数的长度)
- 【编程题】-C++实现:判断字符串在末尾加一个字符,能否构成回文串
- 腾讯 2017 暑假实习生编程题(一):给定一个字符串s,你可以从中删除一些字符,使得剩下的串是一个回文串。如何删除才能使得回文串最长呢? 输出需要删除的字符个数。
- 【结论】【字符串】对于一个字符串用f[i][j]表示i到j位可构成回文串
- A. Mr. Kitayuta's Gift(暴力求加一个字符是否构成回文字符)
- 2016腾讯笔试题,删除字符串中的字符,使得剩下的字符串是回文串,如何删除使得回文串最长
- 2016腾讯笔试题,删除字符串中的字符,使得剩下的字符串是回文串,如何删除使得回文串最长
- 求一个字符串的最长回文串
- 2014百度校园招聘笔试——求一个字符串的最长回文子串
- 2014百度校园招聘笔试——求一个字符串的最长回文子串
- 一个字符串A的子串被定义成从A中顺次选出若干个字符构成的串。如A=“cdaad" ,顺次选1,3,5个字符就构成子串" cad" ,现给定两个字符串,求它们的最长共公子串。 Input 第一行两个字
- 腾讯2016实习生笔试题--求最长回文字符长度
- 给定一个字符串s,你可以从中删除一些字符,使得剩下的串是一个回文串。如何删除才能使得回文串最长呢?
- 判断一个字符串是否为回文,以及求一个字符串中最长回文串
- spark streaming流量控制
- 坐标移动
- 谈动态代理在解决内存泄露中的妙用
- 怎么实现操作树
- 分苹果----网易2017内推笔试编程题合集(一)
- [腾讯笔试]求一个字符串删除若干字符可构成一个回文串
- 利用jquery实现的表格冻结列(固定列)功能
- 如何避免历史回退到登录页面
- reverse a linked list
- MFC 关于SendMessage 消息参数 传送字符串,结构体
- URI,URL,URN的区别
- 寻找和为定值的两个数
- MFC控件(10): Date Time Picker-使用及日期运算
- ZZNU 1991 (结构体排序)