欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 八卦 > leetcode5 -- 最长回文子串

leetcode5 -- 最长回文子串

2025/2/23 20:41:13 来源:https://blog.csdn.net/m0_65985318/article/details/140641218  浏览:    关键词:leetcode5 -- 最长回文子串

题目描述:

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

示例 1:

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

示例 2:

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

提示:

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

解决方法:

回文串:正着读和倒着读是一样的

比如:“bab”,倒过来也是“bab”

比如:“shdnndhs”,倒过来也是“shdnndhs”

从另一个方向思考就是,从回文字符串的中间向两侧扩散得到的结果是一样的

但是这个要分字符串是奇数或者偶数的情况:

1.奇数:比如“cabac”

那么中间的字符是b,向两边扩散分别是“a”,“c”。

2.偶数:比如“bbbb”

那么中间的是“bb”,向两边扩散是“b”。

需要对给定的字符串中的每个字符作考虑,考虑以它为中心能够形成的回文串,长度为奇数或者偶数两种不同的情况要分别判断一下,取长度较长的一种情况。

代码如下:

class Solution {public String longestPalindrome(String s) {if (s == null || s.length() < 2) {return s;}int left = 0, right = 0;int maxLength = 1;int centerIndex = 0;int flag = 1;// 1奇数,2偶数for (int i = 0; i < s.length(); i++) {left = i - 1;right = i + 1;// 奇数情况while (left >= 0 && right < s.length() && s.charAt(left) == s.charAt(right)) {left--;right++;}int len = right - left - 1;if (len > maxLength) {maxLength = len;centerIndex = i;flag = 1;}left = i;right = i + 1;// 偶数情况while (left >= 0 && right < s.length() && s.charAt(left) == s.charAt(right)) {left--;right++;}len = right - left - 1;if (len > maxLength) {maxLength = len;centerIndex = i;flag = 2;}}if (flag == 1) {return s.substring(centerIndex - maxLength / 2, centerIndex + maxLength / 2 + 1);} else if (flag == 2) {return s.substring(centerIndex - maxLength / 2 + 1, centerIndex + maxLength / 2 + 1);} else {return "";}}
}

版权声明:

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

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

热搜词