您的位置:首页 > 其它

血淋淋的教训:输入数据有多组:所以一定要while(cin>>str){}

2017-03-07 22:08 316 查看
给定一个字符串s,你可以从中删除一些字符,使得剩下的串是一个回文串。如何删除才能使得回文串最长呢?
输出需要删除的字符个数。


输入描述:


输入数据有多组,每组包含一个字符串s,且保证:1<=s.length<=1000.


输出描述:


对于每组数据,输出一个整数,代表最少需要删除的字符个数。


输入例子:

abcda
google



输出例子:

2
2#include <iostream>
#include <string>
#include <algorithm>
#include <vector>
#include <cstring>
using namespace std;

int lcs[1001][1001];

int main()
{
string s1,s2;
cin >> s1;
int len = s1.length();
s2 = s1;
reverse(s2.begin(), s2.end());
memset(lcs, 0, sizeof(lcs));
//vector<vector<int>> lcs(len + 1, vector<int>(len + 1, 0));
//for (int i = 0; i < len+1; ++i) lcs[i][0]=0;
//for (int i = 0; i < len+1; ++i) lcs[0][i]=0;
for (int i = 1; i <= len; i++){
for (int j = 1; j <= len; j++){
if (s1[i-1] == s2[j - 1])
lcs[i][j] = lcs[i-1][j-1]+1;
else{
lcs[i][j] = max(lcs[i-1][j],lcs[i][j-1]);
}
}
}

cout << len - lcs[len][len] << endl;

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: