您的位置:首页 > 其它

(算法-字符串)最长对称子串

2015-10-09 20:21 363 查看

题目:

输入字符串中对称的子字符串的最大长度。比如输入字符串“roorle”,由于该字符串里最长的对称子字符串是“roor”,因此输出4.

思路:

1、求字符串”roorle“和反序”elroor“的最长公共子串

2、最长回文子串

代码:

1、最长公共子串

#include<iostream>
using namespace std;

// brute force
string findLongestPalindrome_1(const string &str){
int length=str.size();
int maxLength=0;
int start;

for(int i=0;i<length;i++){
for(int j=i+1;j<length;j++){
int left,right;
for(left=i,right=j;left<right;left++,right--){
if(str[left]!=str[right])
break;
}
if(left>=right && (j-i)>maxLength){
maxLength=j-i+1;
start=i;
}
}
}

if(maxLength>0)
return str.substr(start,maxLength);
return NULL;
}

// dynamic programming
string findLongestPalindrome_2(string &str){
const int length=str.size();
int maxLength=1;
int start;

bool dp[length][length];

for(int i=0;i<length;i++)
for(int j=0;j<length;j++)
dp[i][j]=false;

for(int i=0;i<length;i++){
dp[i][i]=true;
if(i<length-1 && str[i]==str[i+1]){
dp[i][i+1]=true;
start=i;
maxLength=2;
}
}

for(int len=3;len<=length;len++){
for(int i=0;i<=length-len;i++){
int j=i+len-1;
if(dp[i+1][j-1] && str[i]==str[j]){
dp[i][j]=true;
start=i;
maxLength=len;
}
}
}

if(maxLength>=2)
return str.substr(start,maxLength);
return NULL;
}

// pivot expand
string findLongestPalindrome_3(string &str){
const int length=str.size();
int maxLength=1;
int start;

// length is odd
for(int i=0;i<length;i++){
int left=i-1;
int right=i+1;
while(left>=0 && right<=length-1 && str[left]==str[right]){
if(right-left+1>maxLength){
start=left;
maxLength=right-left+1;
}
left--;
right++;
}
}

// length is even
for(int i=0;i<length;i++){
int left=i;
int right=i+1;
while(left>=0 && right<=length-1 && str[left]==str[right]){
if(right-left+1>maxLength){
start=left;
maxLength=right-left+1;
}
left--;
right++;
}
}

if(maxLength>0)
return str.substr(start,maxLength);
return NULL;
}

int main(){
string str="ababcddcbbd";
cout<<findLongestPalindrome_1(str)<<endl;
cout<<findLongestPalindrome_2(str)<<endl;
cout<<findLongestPalindrome_3(str)<<endl;
return 0;
}


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