您的位置:首页 > 职场人生

psd面试—最长回文串模板

2018-03-27 20:22 148 查看
忽略字母大小写,求给定字符串去掉最长的回文子序列还有多长
#include<bits/stdc++.h>
using namespace std;
string s;
int longestPalindromeSubSequence1(string str)
{
int n=str.length();
vector<vector<int> > dp(n,vector<int>(n));

for(int j=0;j<n;j++){
dp[j][j]=1;
for(int i=j-1;i>=0;i--){
if(str[i]==str[j])
dp[i][j]=dp[i+1][j-1]+2;
else
dp[i][j]=max(dp[i+1][j],dp[i][j-1]);
}
}
return dp[0][n-1];
}

int longestPalindromeSubSequence2(string str){
int n=str.length();
vector<vector<int> > dp(n,vector<int>(n));

for(int i=n-1;i>=0;i--){
dp[i][i]=1;
for(int j=i+1;j<n;j++){
if(str[i]==str[j])
dp[i][j]=dp[i+1][j-1]+2;
else
dp[i][j]=max(dp[i+1][j],dp[i][j-1]);
}
}
return dp[0][n-1];
}

int main()
{
int length;
while(cin>>s)
{
for(int i = 0; i < s.size(); i++)
{
if(s[i] >= 'A' && s[i] <= 'Z')
s[i] += 32;
}
length=longestPalindromeSubSequence2(s);
cout<<s.size()-length<<endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: