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; }