求字符串中的最长回文子串的长度

        话不多说,开始撸代码:

输入:

输入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*,这样就回避了当两个相同字符相邻且相等的情况。

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值