首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >[NC14517]回文串

[NC14517]回文串

作者头像
@VON
发布2025-12-21 11:32:39
发布2025-12-21 11:32:39
420
举报

链接:登录—专业IT笔试面试备考平台_牛客网 来源:牛客网

题目描述

既然大家都知道回文串是怎么回事了,那我们就长话短说,现在有一个字符串,长度小于1200,我想知道最长的回文子串长度是多少。

输入描述:

代码语言:javascript
复制
多组输入,输入字符串只包含小写字母。

输出描述:

代码语言:javascript
复制
每组输出一个数字,表示最长的回文子串。

示例1

输入

代码语言:javascript
复制
aqppqole
ebcml

输出

4 1

代码展示

代码语言:javascript
复制
#include<bits/stdc++.h>
using namespace std;
int main(){
	string s;
	while(cin>>s){
		int size=s.size();
		int left=0,right=0,maxlen=0,len=1;
		for(int i=0;i<size;i++){
			left=i-1;
			right=i+1;
			// 左边
			while(left>=0&&s[left]==s[i]){
				len++;
				left--;
			} 
			// 右边
			while(right<=size&&s[right]==s[i]){
				len++;
				right++;
			} 
			// 左右
			while(left>=0&&right<=size&&s[left]==s[right]){
				len+=2;
				left--;
				right++;
			} 
			if(len>maxlen){
				maxlen=len;
			}
			len=1;
		}
		cout<<maxlen<<endl;
	}	
}

逻辑详解

1.变量初始化

  • size:存储输入字符串 s 的长度。
  • leftright:用于标记当前检查的回文子串的左右边界。
  • maxlen:记录找到的最长回文子串的长度,初始值为0。
  • len:记录当前检查的回文子串的长度,初始值为1。

2.外层循环

  • 遍历字符串 s 的每个字符,使用索引 i

3.左边检查

  • 从当前字符 s[i] 的左边开始,left 指向 i-1
  • 只要 left 大于等于0且 s[left] 等于 s[i],就增加 len 并向左移动 left

4.右边检查

  • 从当前字符 s[i] 的右边开始,right 指向 i+1
  • 只要 right 小于等于 sizes[right] 等于 s[i],就增加 len 并向右移动 right

5.左右同时检查

  • 这一步是针对以当前字符为中心的回文子串进行检查。
  • 只要 left 大于等于0且 right 小于等于 sizes[left] 等于 s[right],就增加 len 并同时向左和向右移动 leftright

6.更新最长回文长度

  • 如果当前检查的回文子串长度 len 大于 maxlen,则更新 maxlen

7.重置 len

  • 每次检查完一个字符后,重置 len 为1,为下一个字符的检查做准备。

8.输出结果

  • 输出找到的最长回文子串的长度。
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-12-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题目描述
  • 输入描述:
  • 输出描述:
  • 输入
  • 输出
  • 代码展示
  • 逻辑详解
  • 1.变量初始化:
    • 2.外层循环:
    • 3.左边检查:
    • 4.右边检查:
    • 5.左右同时检查:
    • 6.更新最长回文长度:
    • 7.重置 len:
    • 8.输出结果:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档