剩下的串是一个回文串.如何删除win10要权限才能删除使得回文串最长

技术交流学习或者有任何问题欢迎加群 编程技术交流群 : &
Java技术交流群 : 6128790 &
标签:&&&&&&&&&&&&&&&&&&&&&&&&&&&输入描述:
输入数据有多组,每组包含一个字符串s,且保证:1&=s.length&=1000.
对于每组数据,输出一个整数,代表最少需要删除的字符个数。
给出c++代码:
#include &iostream&#include &string&#include &algorithm&int LCS(const string &str1,const string &str2) { if (str1 == "" || str2 == "")
return 0; else
if (str1.back() == str2.back())
return LCS(str1.substr(0, str1.size() - 1), str2.substr(0, str2.size() - 1)) + 1;
return max(LCS(str1.substr(0, str1.size() - 1), str2.substr(0, str2.size())), LCS(str1.substr(0, str1.size()), str2.substr(0, str2.size() - 1))); }int main() { string str1; while (getline(cin,str1)) {
string str2(str1);
reverse(str1.begin(), str1.end());
cout&&str1.length()-LCS(str1, str2); } return 0;}
  标签:&&&&&&&&&&&&&&&&&&&&&&&&&&&原文:http://www.cnblogs.com/whaohe/p/5848701.html
技术交流学习或者有任何问题欢迎加群 编程技术交流群 : &
Java技术交流群 : 6128790 &他的最新文章
他的热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)在 SegmentFault,学习技能、解决问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。
问题对人有帮助,内容完整,我也想知道答案
问题没有实际价值,缺少关键内容,没有改进余地
给定一个字符串s,你可以从中删除一些字符,使得剩下的串是一个回文串。如何删除才能使得回文串最长呢?输出需要删除的字符个数。输入要求:输入数据有多组,每组包含一个字符串s,且保证:1&=s.length&=1000.输出要求:对于每组数据,输出一个整数,代表最少需要删除的字符个数。
我的思路是这样的遍历实例化agruguments数组之后,然后对数组进行遍历,如果i对应的那个字母仅仅出现一次,而且arr[i-1]!=arr[i+1],那么就删除i对应的那个字母,然后在另个负责计数的变量里面加1。可是看完答案我只能看懂一部分,求各位大大解答一下。
function slect(){
var arr=new Array();
arr=Array.prototype.slipt(arguments);
for(var i=0;i&arr.i++){
if(arr[i])//这句是什么意思?难道不是取出arr[i]里面的这个数,然后判断他是不是0吗?但是这样怎么能统计出需要删除的个数呢?
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
const minCut = function(s) {
const n = s.
const cut = [];
for (let i = 0; i &= i++) cut[i] = i - 1;
for (let i = 0; i & i++) {
for (let j = 0; i - j &= 0 && i + j & n && s[i - j] == s[i + j]; j++)
cut[i + j + 1] = Math.min(cut[i + j + 1], 1 + cut[i - j]);
for (let j = 1; i - j + 1 &= 0 && i + j & n && s[i - j + 1] == s[i + j]; j++) // even length palindrome
cut[i + j + 1] = Math.min(cut[i + j + 1], 1 + cut[i - j + 1]);
return cut[n]
同步到新浪微博
分享到微博?
关闭理由:
删除理由:
忽略理由:
推广(招聘、广告、SEO 等)方面的内容
与已有问题重复(请编辑该提问指向已有相同问题)
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
无法获得确切结果的问题
非开发直接相关的问题
非技术提问的讨论型问题
其他原因(请补充说明)
我要该,理由是:
在 SegmentFault,学习技能、解决问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。给定一个字符串s,你可以从中删除一些字符,使得剩下的串是一个回文串。如何删除才能使得回文串最长呢?
输出需要删除的字符的个数。
先求字符串s的反转串rs,然后求s和rs的最大公共子序列(子序列和子串的区别是子序列不要求连续,子串要求连续),则最大公共子序列的长度即为最大回文串的长度。(注意:字符串和其反转串的最大公共子序列一定是对称的,即回文)
关于求两个字符串s1和s2的最长公共子序列,可以用动态规划来做。
DP[i][j]表示s1左边i个字符与s2左边j个字符的最大公共子串,则有以下关系:
if s1[i]==s2[j]
DP[i][j]=1+DP[i-1][j-1]
else DP[i][j]=max(DP[i-1][j], DP[i][j-1])
#include &iostream&
#include &string&
#include &vector&
string converseString(string str){
int size = str.size();
if (size & 2)
int front = 0, rear = size - 1;
while(front & rear){
char temp = str[front];
str[front] = str[rear];
str[rear] =
int max(int a, int b){
return a&b ? a :
int GetLCS(string s1, string s2){
int size = s1.size();
int curMax = 0;
vector&vector&int& & DP(size + 1, vector&int&(size + 1, 0));
for (int i = 0; i &= i++)
DP[i][0] = 0;
DP[0][i] = 0;
for (int i = 1; i &= i++)
for (int j = 1; j &= j++){
if (s1[i - 1] == s2[j - 1])
DP[i][j] = DP[i - 1][j - 1] + 1;
DP[i][j] = max(DP[i][j - 1], DP[i - 1][j]);
if (DP[i][j] & curMax)
curMax = DP[i][j];
return curM
int core(string str){
string converseStr = converseString(str);
return str.size() - GetLCS(str, converseStr);
int main(int argc, char* argv[])
cout && core("google") &&}

我要回帖

更多关于 system的权限才能删除 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信