C++ 最简洁的想法之一,以找对称轴开始
1,两种情况:1,以两个相同字符为对称轴 2,以一个相同字符为对称轴
2,以两个相同字符为扩散范围寻找
3,以一个相同字符为对称轴寻找
4,记录最大值
#include <iostream>
#include<string>
using namespace std;
int main()
{
string str;
int max=0,i,t;
int kuo;//扩散对称范围用
while(cin>>str)
{
for(i=0;i<str.size()-1;i++)
{
if(str[i]==str[i+1])//以两个相同字符为对称轴(偶数个以上与两个都一样)
{
t=2;
kuo=1;
for(int j=0;j<str.size()/2;j++)
{
if((i-kuo>=0)&&(i+kuo+1)<str.size())//扩散再字符串之内,防止越界
{
if(i>=1&&str[i-kuo]==str[i+kuo+1])//对称判断
{
t+=2;
kuo++; //扩散对称范围
}
else
{
break;
}
}
}
if(t>max)
{
max=t;
}
}
else//以一个相同字符为对称轴(奇数个以上与两个都一样)
{
t=1;
kuo=1;
for(int j=0;j<str.size()/2;j++)
{
if((i-kuo>=0)&&(i+kuo+1)<str.size())//扩散再字符串之内,防止越界
{
if(i>=1&&str[i-kuo]==str[i+kuo])//对称判断
{
t+=2;
kuo++; //扩散对称范围
}
else
{
break;
}
}
}
if(t>max)
{
max=t;
}
}
}
cout<<max<<endl;
max=0;//要清零
}
return 0;
}

京公网安备 11010502036488号