求两字符串最长公共子序列LCS的应用—删除字符串的字符剩下回文串
2017-08-20 20:04
281 查看
转自:http://blog.csdn.net/yebanxin/article/details/52186706
问题描述:
给定一个字符串s,你可以从中删除一些字符,使得剩下的串是一个回文串。如何删除才能使得回文串最长呢?输出需要删除的字符个数。
例如:输入:google 输出:2
思路:回文串通常可以用逆序的方式寻找思路。例如字符串google逆序后elgoog,字符串alibaba逆序后ababila,可以发现求回文串的问题可以转换成求两个字符串的最大公共子序列的问题(序列可以不连续)。
需要删除的长度 = 字符串的长度 - 字符串与逆序字符串的最大公共子序列的长度
问题描述:求两个字符串的最大公共子序列(LCS)(序列可以不连续)
例如:alibaba和ababila的最大公共子序列为ababa
思路:对于字符串a和字符串b,长度分别为m,n,先考虑他们的最后一个字符。
(1)如果相等,说明最后一个字符一定可以是最大公共子序列的最后一位(这里使用可以的意思是:有多解),那么我们可以先丢弃这最后一位,求解字符串a.substr(0, m-2)和b.substr(0, n-2)的最大公共子序列。a.substr(x,y)表示截取字符串a的x到y下标之间的部分
(2)如果不相等,则最大子序列一定在一下两者之间:a.substr(0, m-2) 和 b.substr(0, n-1)(丢弃a的最后一位)a.substr(0, m-1) 和 b.substr(0, n-2)(丢弃b的最后一位)
问题描述:
给定一个字符串s,你可以从中删除一些字符,使得剩下的串是一个回文串。如何删除才能使得回文串最长呢?输出需要删除的字符个数。
例如:输入:google 输出:2
思路:回文串通常可以用逆序的方式寻找思路。例如字符串google逆序后elgoog,字符串alibaba逆序后ababila,可以发现求回文串的问题可以转换成求两个字符串的最大公共子序列的问题(序列可以不连续)。
需要删除的长度 = 字符串的长度 - 字符串与逆序字符串的最大公共子序列的长度
问题描述:求两个字符串的最大公共子序列(LCS)(序列可以不连续)
例如:alibaba和ababila的最大公共子序列为ababa
思路:对于字符串a和字符串b,长度分别为m,n,先考虑他们的最后一个字符。
(1)如果相等,说明最后一个字符一定可以是最大公共子序列的最后一位(这里使用可以的意思是:有多解),那么我们可以先丢弃这最后一位,求解字符串a.substr(0, m-2)和b.substr(0, n-2)的最大公共子序列。a.substr(x,y)表示截取字符串a的x到y下标之间的部分
(2)如果不相等,则最大子序列一定在一下两者之间:a.substr(0, m-2) 和 b.substr(0, n-1)(丢弃a的最后一位)a.substr(0, m-1) 和 b.substr(0, n-2)(丢弃b的最后一位)
相关文章推荐
- 【动态规划】LCS算法:求两字符串最大公共子序列/删除字符使成为回文串
- 删除部分字符使其变成回文串问题——最长公共子序列LCS问题
- 给定一个字符串s,你可以从中删除一些字符,使得剩下的串是一个回文串。如何删除才能使得回文串最长呢? 输出需要删除的字符个数。
- 动态规划问题--最长公共子序列(LCS)问题--删除一些字符使得剩下的是一个回文子串
- 给定一个字符串s,你可以从中删除一些字符,使得剩下的串是一个回文串。如何删除才能使得回文串最长呢?
- 给定一个字符串a,你可以从中删除一些字符,使得剩下的串是一个回文串。如何删除才能使得回文串最长? 输出需要删除的字符个数。
- 腾讯 2017 暑假实习生编程题(一):给定一个字符串s,你可以从中删除一些字符,使得剩下的串是一个回文串。如何删除才能使得回文串最长呢? 输出需要删除的字符个数。
- 2016腾讯笔试题,删除字符串中的字符,使得剩下的字符串是回文串,如何删除使得回文串最长
- 删除部分字符使其变成回文串问题——最长公共子序列(LCS)问题
- 给定一个字符串s,你可以从中删除一些字符,使得剩下的串是一个回文串。如何删除才能使得回文串最长呢? 输出需要删除的字符个数。
- 2016腾讯笔试题,删除字符串中的字符,使得剩下的字符串是回文串,如何删除使得回文串最长
- 最大公共子序列(删除字符使得剩下的是回文串)
- 最少需要删除多少个字符才能使字符串S变为回文串
- 面试题94:删除最少字符,使字符串为回文串
- JAVA动态规划(二)--最长公共子序列问题(LCS_subSequence)的三种解法与最长公共子字符串(LCS_subString)的两种解法与最长回文串(LongestPalindrome)
- 判断一个字符串在至多删除k个字符后是否为回文串
- 2017百度校园招聘编程题 删除字符构造最长回文字符串(求最长公共子序列的变种)
- [腾讯笔试]求一个字符串删除若干字符可构成一个回文串
- 删除最少字符 使字符串成为回文串
- 给定字符串,删除最少的字符,使剩下的字符串成为回文串