话不多说,开始撸代码:
输入:
输入n个字符串,每个字符串占一行,且字符串中不包含空格等特殊字符,当该字符串为"0"时,退出程序运行。
输出:
输出该字符串的最长回文子串的长度。
代码如下:
#include <iostream>
#include <string>
#include <cstring> //前三行是头文件
using
namespace
std;
int
main()
{
string s;
while
(cin>>s)
{
if
(s==
"0"
) //if循环是判断是否为‘0’,是就结束程序
{
break
;
}
else
{
int
length=s.size();//.size()函数是统计字符串共有多少个字符
int
remlength=1; //记录回文长度
int
maxlength=0; //保存最大回文个数
for
(
int
i=0,k=0;i<=length;i++)
{
s.insert(k,
"*"
); //.insert()函数是插入函数,插入*用于计算回文字数
k=k+2;
}
length=s.size(); //统计插入完有多少字符
//=========================================================================================================
for
(
int
i=0;i<length;i++) //这个for循环开始计算回文
{
int
j=i-1,k=i+1;
while
(j>=0&&k<length)
{
if
(s.at(j)==s.at(k))//.at()函数是返回第j和第k个位置的字符
{
remlength=remlength+2;
j--;
k++;
}
else
break
;
}
if
(remlength>maxlength) //如果记录的大于现存最大的那么就记录下来
{
maxlength=remlength;
}
remlength = 1; //每记录下来一个就要清空一次
}
cout<< (maxlength/2) <<endl;
}
}
return
0;
}
比如说我输入字符为123456,那么我运行完.insert()函数后我输入的字符串就会变成*1*2*3*4*5*6*,这样就回避了当两个相同字符相邻且相等的情况。