题解 | #密码截取#

密码截取

https://www.nowcoder.com/practice/3cd4621963e8454594f00199f4536bb1

#include <iostream>
using namespace std;

int main() {//找回文串
    string str;
    cin>>str;
    int maxnum = 1;
    if(str.size()==1){
        cout<<1;
        return 0;
    }
    //回文串:中心扩散法,AB B A往两边扩,A B A往两边扩,最边上的两个不需要判断,肯定是1
    for(int i=1;i<str.size()-1;i++){//这个循环是判断AB B A型,我选择的中心是中间偏左的字母
       if(str[i-1]==str[i]){//判断ABBA
           int temp = 0;//记录临时回文数 
           for(int j=i,k=i;j>=0&&k<=str.size()-1;j--,k++){
              if(str[j-1]==str[k]){
                temp++;
              }else{
                break;
              }
          }
          maxnum=max(maxnum,temp*2);//返回较大的
       }
       if(str[i-1]==str[i+1]){//这个循环是判断ABA型,我选择的中间为中心字母
           int temp = 0;//记录临时回文数
           for(int j=i-1,k=i+1;j>=0&&k<=str.size()-1;j--,k++){//循环判断
                if(str[j]==str[k]){
                    temp++;
              }else{
                break;
              }
           }
           maxnum=max(maxnum,temp*2+1);//返回较大的
       }
    }
    cout<<maxnum;
}
// 64 位输出请用 printf("%lld")

全部评论

相关推荐

点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务