腾讯 2017 暑假实习生编程题(一):给定一个字符串s,你可以从中删除一些字符,使得剩下的串是一个回文串。如何删除才能使得回文串最长呢? 输出需要删除的字符个数。
来源:互联网 发布:原生js点击显示隐藏 编辑:程序博客网 时间:2024/05/21 17:22
回文串的特点是,逆序输出和正序输出是一样的。
所以这道题可以转化为:如果将此字符串逆序输出,那么两个字符串的最长公共子序列将是最长的回文字符串,那么剩余的值将是要删除的字符个数。
经典 LCS 算法题:POJ 1458 Common Subsequence 最长公共子序列(LCS)
LCS运行轨迹图
import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.io.PrintWriter;import java.util.Scanner;public class Main { /** * Q: 为什么这个数组每次使用都不需要清空? * A: 因为数组最上边的一行全部为 0 && 最左边的一列也全部为 0 , * 而后续的值都是根据这一行一列来定值的。 */ private static int[][] maxLen = new int[1000][1000]; private static int work(String str) { char[] ch = str.toCharArray(); char[] ch2 = new StringBuilder(str).reverse().toString().toCharArray(); int length = ch.length; int length2 = ch2.length; for (int i = 1; i <= length; i++) { for (int j = 1; j <= length2; j++) { if (ch[i - 1] == ch2[j - 1]) { maxLen[i][j] = maxLen[i - 1][j - 1] + 1; } else { maxLen[i][j] = Math.max(maxLen[i][j - 1], maxLen[i - 1][j]); } } } return length - maxLen[length][length2]; } public static void main(String[] args) { Scanner in = new Scanner(new BufferedReader(new InputStreamReader(System.in))); PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out))); String inputStr; while (in.hasNext()) { inputStr = in.next(); out.println(work(inputStr)); } out.flush(); }}
阅读全文
0 0
- 腾讯 2017 暑假实习生编程题(一):给定一个字符串s,你可以从中删除一些字符,使得剩下的串是一个回文串。如何删除才能使得回文串最长呢? 输出需要删除的字符个数。
- 给定一个字符串s,你可以从中删除一些字符,使得剩下的串是一个回文串。如何删除才能使得回文串最长呢? 输出需要删除的字符个数。
- 给定一个字符串s,你可以从中删除一些字符,使得剩下的串是一个回文串。如何删除才能使得回文串最长呢?
- 给定一个字符串a,你可以从中删除一些字符,使得剩下的串是一个回文串。如何删除才能使得回文串最长? 输出需要删除的字符个数。
- 2016腾讯笔试题,删除字符串中的字符,使得剩下的字符串是回文串,如何删除使得回文串最长
- 2016腾讯笔试题,删除字符串中的字符,使得剩下的字符串是回文串,如何删除使得回文串最长
- 动态规划问题--最长公共子序列(LCS)问题--删除一些字符使得剩下的是一个回文子串
- 最大公共子序列(删除字符使得剩下的是回文串)
- 构造回文(删除字符使得回文子串最长)
- 给定字符串,删除最少的字符,使剩下的字符串成为回文串
- 最少需要删除多少个字符才能使字符串S变为回文串
- 通过最长公共子串求得使得一个串变为回文串的最少添加字符
- 求两字符串最长公共子序列LCS的应用—删除字符串的字符剩下回文串
- [腾讯笔试]求一个字符串删除若干字符可构成一个回文串
- 【2013微软校招面试题】求给定的一个字符串最小需要添加多少个字符才能成为回文串
- 给定一个字符串s,找出最长的回文子串
- JAVA动态规划(三)--最长回文字符串(可删除中间字符)【腾讯2016实习生笔试题】
- 可删除某些字符的最长回文字符串(2016腾讯在线笔试题)
- 书写高质量jQuery代码的12条经验
- Android Studio中获取MD5、SHA1、SHA256证书指纹数据的方法
- the part that is good is not original, and the part that is original is not good.
- Android Studio 必备使用技巧
- [uboot] (番外篇)uboot relocation介绍
- 腾讯 2017 暑假实习生编程题(一):给定一个字符串s,你可以从中删除一些字符,使得剩下的串是一个回文串。如何删除才能使得回文串最长呢? 输出需要删除的字符个数。
- NOIP普及组题解
- 腾讯云新购主机怎么添加数据盘
- Jmeter压测webService(详细步骤包括下载地址)
- Spark任务的提交
- [uboot] (第一章)uboot流程——概述
- 【python】理解python里的赋值、引用、拷贝及作用域、内存管理、垃圾回收
- java三大特性:(一)封装
- FAT32和NTFS最大支持的单个文件大小分别是多大?