例如:str=helloworld 输出 3 (owo)
注:回文串有两种 类型:
类型一、abcba 类型二、abccba
算法思想:为从第二个元素开始顺序遍历字符串。1.查看第i个字符是否和第i-1个相等,相等符合类型二 处理。2.如果1不满足在查看i两边元素是否相等,相等符合类型一,否则i++。
代码如下:
#include<cstring>
#include<iostream>
using namespace std;
int hui_wen(string str,int &begin,int &end)
{
int temp,sum=1,l,h;
int len=str.length();
for(int i=1;i<len-1;i++)
{
l=i-1;
h=i+1;
temp=1;
if(str[i]!=str[l])
{
while((l>=0&&h<len)&&(str[l]==str[h]))
{
l--;
h++;
temp+=2;
}
if(temp>sum)
{
sum=temp;
begin=l+1;
end=h-1;
}
}
else
{
l--;
temp++;
while((l>=0&&h<len)&&(str[l]==str[h]))
{
l--;
h++;
temp+=2;
}
if(temp>sum)
{
sum=temp;
begin=l+1;
end=h-1;
}
}
}
if(sum==1)
return 0;
else
return sum;
}
int main()
{
int begin,end;//记录回文在字符串中的起点和终点
string str;
cin>>str;
int temp=hui_wen(str,begin,end);
if(temp!=0)
{
cout<<"hui wen string:"<<str.substr(begin,end-begin+1)<<" length:"<<temp<<endl;
//substr(m,n)表示起点坐标为m,长度为n-m。[ , ) 。
}
else
{
cout<<"no hui wen string"<<endl;
}
return 0;
}