给定一个字符串s,你可以从中删除一些字符,使得剩下的串是一个回文串。如何删除才能使得回文串最长呢? 输出需要删除的字符个数。
来源:互联网 发布:易我数据恢复好用吗 编辑:程序博客网 时间:2024/06/11 06:04
链接:https://www.nowcoder.com/questionTerminal/28c1dc06bc9b4afd957b01acdf046e69
来源:牛客网
来源:牛客网
#include <iostream>
#include <string>
using namespace std;
/*
解题思路:
(1)把字符串旋转形成另外一个字符串,称为旋转字符串;
(2)求原字符串s1与旋转字符串s2中,最长公共子串的长度;
(3)删除的字符数目 = 原字符串的长度 - 最长公共子串的长度。
需要解决的子问题:
求两个字符串s1和s2中最长公共子串的长度。
子问题的求解方式:动态规划
设 MaxLen(i,j)表示s1左边i个字符与s2左边j个字符的最长公共子串长度,则子问题的解为MaxLen(strlen(s1),strlen(s2));
MaxLen(i,j)的求解方式为:
若s1第i个字符与s2第j个字符相匹配,则 return 1+MaxLen(i-1,j-1);
否则:return max(MaxLen(i-1,j),MaxLen(i,j-1))
边界条件:
MaxLen(i,n)=0; for n in 0 to strlen(s2)
MaxLen(n,j)=0; for n in 0 to strlen(s1)
*/
#define __MAX_STR_LEN__
1000
int
max_len[__MAX_STR_LEN__][__MAX_STR_LEN__];
int
main(){
string s1;
while
(cin >> s1){
string s2(s1.rbegin(),s1.rend());
for
(
int
i =
0
; i < s1.length(); i++){
max_len[i][
0
] =
0
;
max_len[
0
][i] =
0
;
}
for
(
int
i =
1
; i <= s1.length(); i++)
for
(
int
j =
1
; j <= s2.length(); j++){
if
(s1[i-
1
] == s2[j-
1
]){
max_len[i][j] = max_len[i-
1
][j-
1
]+
1
;
}
else
max_len[i][j] = max(max_len[i-
1
][j],max_len[i][j-
1
]);
}
cout << s1.length() - max_len[s1.length()][s2.length()] << endl;
}
return
0
;
}
阅读全文
0 0
- 给定一个字符串s,你可以从中删除一些字符,使得剩下的串是一个回文串。如何删除才能使得回文串最长呢? 输出需要删除的字符个数。
- 腾讯 2017 暑假实习生编程题(一):给定一个字符串s,你可以从中删除一些字符,使得剩下的串是一个回文串。如何删除才能使得回文串最长呢? 输出需要删除的字符个数。
- 给定一个字符串s,你可以从中删除一些字符,使得剩下的串是一个回文串。如何删除才能使得回文串最长呢?
- 给定一个字符串a,你可以从中删除一些字符,使得剩下的串是一个回文串。如何删除才能使得回文串最长? 输出需要删除的字符个数。
- 2016腾讯笔试题,删除字符串中的字符,使得剩下的字符串是回文串,如何删除使得回文串最长
- 2016腾讯笔试题,删除字符串中的字符,使得剩下的字符串是回文串,如何删除使得回文串最长
- 动态规划问题--最长公共子序列(LCS)问题--删除一些字符使得剩下的是一个回文子串
- 最大公共子序列(删除字符使得剩下的是回文串)
- 构造回文(删除字符使得回文子串最长)
- 给定字符串,删除最少的字符,使剩下的字符串成为回文串
- 最少需要删除多少个字符才能使字符串S变为回文串
- 通过最长公共子串求得使得一个串变为回文串的最少添加字符
- 求两字符串最长公共子序列LCS的应用—删除字符串的字符剩下回文串
- 【2013微软校招面试题】求给定的一个字符串最小需要添加多少个字符才能成为回文串
- 给定一个字符串s,找出最长的回文子串
- 【codeforces 724D】【贪心】 Dense Subsequence 【一个字符串,按照一定的区间要求从中选出一些字符,使得这串字符的sort后字典序最小】
- 给定一个字符串,切分该字符串,使得到的子串都是回文字符串,计算最少的切分次数。
- 一个字符串要变成回文串的需要添加的字符最少个数
- 设计模式12-策略模式
- java读取properties文件
- MyBatis框架介绍
- Linux系统下安装rz/sz命令及使用说明
- 关于DB2中时间日期的操作
- 给定一个字符串s,你可以从中删除一些字符,使得剩下的串是一个回文串。如何删除才能使得回文串最长呢? 输出需要删除的字符个数。
- Selenium2+Python2.0自动化测试【2】 操作浏览器
- Push对app运营的影响(一)
- 程序提交RE错误问题
- C++常见面试题:虚函数实现原理
- mysql 笔记
- 数据结构--图--拓扑排序/关键路径/AOE/AOV
- java关键字
- 服务器的编写