欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 美食 > 力扣5.最长回文子串(暴力解法)

力扣5.最长回文子串(暴力解法)

2026/5/9 23:15:33 来源:https://blog.csdn.net/2301_80505422/article/details/144064927  浏览:    关键词:力扣5.最长回文子串(暴力解法)

题目描述

题目链接5. 最长回文子串

给你一个字符串 s,找到 s 中最长的回文子串。

示例 1:

输入:s = "babad"
输出:"bab"
解释:"aba" 同样是符合题意的答案。

示例 2:

输入:s = "cbbd"
输出:"bb"

提示:

  • 1 <= s.length <= 1000
  • s 仅由数字和英文字母组成

思路解析

        首先我们可以直接封装一个判断是否为回文的函数,参数为一个字符串即可,函数内进行循环,从头和尾向中间遍历,当有不相同时返回false,遍历完成之后返回true。

        因为我们要找到的是最长的回文子串,所以我们从最长的子串开始判断,找到回文子串时直接返回,不需要再进行之后的判断,具体步骤为:

 一层循环:创建一个变量len为字符串长度(最长子串长度),一直遍历到len比1大,如果len遍历到1了的话,说明该字符串任意一个字符都可以为最长回文子串

二层循环:i从头开始遍历,判断从i开始长度为len的子串是否为回文子串,如果是直接返回。这里可以进行一个小优化,如果该子串的第一个字符和最后一个字符不相等的话,就不用进入判断回文函数了,可以有效应对大量数据。

如果遍历完都没有找到则返回第一个字符。

代码实现

class Solution {
public:bool torf(string s){//判断是不是回文字符串for(int i=0,j=s.size()-1;i<j;i++,j--){if(s[i]!=s[j])return false;}return true;}string longestPalindrome(string s) {for(int len=s.size();len>1;len--){//从最长子串开始判断for(int i=0;i+len<=s.size();i++){//从头开始遍历,如果从i开始len长度的子串存在进入判断if(s[i]!=s[i+len-1])continue;//小优化,如果头尾不同不进入判断if(torf(s.substr(i,len)))return s.substr(i,len);//如果是直接返回,不用判断更短的子串了}}string ans;//如果没有找到回文子串,返回第一个字符ans+=s[0];return ans;}
};

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词