ACM学习历程24——最大回文子串

来源:互联网 发布:淘宝卖家被敲诈 编辑:程序博客网 时间:2024/05/21 14:59

回文串是指存在这样一种字符串,正读和反读所得到的结果都是一样的,例如1234321,无论正读和反读得到的都是一样的序列。最大回文子串问题是字符串操作的基本类型之一,求解字符串的最大回文字符串要求从一个字符串中找出存在的最大长度的回文子串。求解字符串的最大回文子串的思路有如下两种,当然不限于这两种方法,在后面将介绍其他算法思想。

一、若字符串的长度为N,定义变量i和变量j,其中i的范围为0<=i<=N-1,i<=j<=N-1,那么对于在闭区间[i,j],i+j的值为一个确定的值,如果在(k=i;k<=j;k++)的条件下,始终有s[k]==s[i+j-k],那么这就是一个可能的回文串,至于是不是最大的回文子串,则要根据具体的代码来判断。可以先设置一个变量max=0,用来记录每一次检测到一个回文串时,是否比上次找的回文串长度更大,若比上一次大,则将该回文子串的长度赋值给max,为了输出该最大回文串,设置mark1和mark2记录回文串开始和结束的位置。

#include<iostream>#include<string>using namespace std;int main(){int i,j,k;char ss[512];string s;while(cin.getline(ss,512)){s=ss;int length=s.length();int max=0,mark1=0,mark2=0;for(i=0;i<length;i++){for(j=i;j<length;j++){int flag=1;for(k=i;k<=j;k++){if(s[k]!=s[i+j-k]){flag=0;break;}}if(flag && j-i+1>max){max=j-i+1;mark1=i;mark2=j;}}}cout<<"The length of palindrome string="<<max<<endl;cout<<"The palindrome string=";for(int i=mark1;i<=mark2;i++)cout<<s[i];cout<<endl;}return 0;}测试输出:1The length of palindrome string=1The palindrome string=112The length of palindrome string=1The palindrome string=11212The length of palindrome string=3The palindrome string=12112345666543777The length of palindrome string=9The palindrome string=34566654312345657The length of palindrome string=3The palindrome string=565
二、从字符串的中间某个位置开始向两侧探测,设变量i,其中(i=0;i<len;i++),那么从i的位置开始向两侧探测每次同时向两侧移动一个字符若移动后对应的两个字符相等,则继续移动,直到不相等为止。

#include<iostream>#include<string>using namespace std;int main(){int i,j,k;char ss[512];string s;while(cin.getline(ss,512)){s=ss;int length=s.length();int max=0,mark1=0,mark2=0;for(i=0;i<length;i++){//如果s为奇数串for(j=0;j<=i&&j+i<length;j++){if(s[i-j]!=s[i+j])break;if(2*j+1>max){max=2*j+1;mark1=i-j;mark2=i+j;}}//如果是偶数串for(j=0;j<=i&&i+j+1<length;j++){if(s[i-j]!=s[i+j+1])break;if(2*j+2>max){max=2*j+2;mark1=i-j;mark2=i+j+1;}}}cout<<"The length of palindrome string="<<max<<endl;cout<<"The palindrome string=";for(int i=mark1;i<=mark2;i++)cout<<s[i];cout<<endl;}return 0;}测试输出:1The length of palindrome string=1The palindrome string=112The length of palindrome string=1The palindrome string=11221The length of palindrome string=4The palindrome string=122111The length of palindrome string=2The palindrome string=1112345676588The length of palindrome string=5The palindrome string=56765

0 0
原创粉丝点击