Leetcode5. 最长回文子串
持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第2天,点击查看活动详情。
❤️欢迎订阅java厂长《LeetCode每日一题》 ❤️
1、题目📑
给你一个字符串 s,找到 s 中最长的回文子串。
实例1:
输入:s = "babad"
输出:"bab"
解释:"aba" 同样是符合题意的答案。
实例2:
输入: s = "cbbd"
输出: "bb"
提示:
1 <= s.length <= 1000s仅由数字和英文字母组成
2、思路🧠
方法一: 待更新
废话少说~~~~~上代码!
3、代码👨💻
第一次commit AC
public class Solution {
public String longestPalindrome(String s) {
int len = s.length();
if (len < 2) {
return s;
}
int maxLen = 1;
int begin = 0;
// s.charAt(i) 每次都会检查数组下标越界,因此先转换成字符数组
char[] charArray = s.toCharArray();
// 枚举所有长度大于 1 的子串 charArray[i..j]
for (int i = 0; i < len - 1; i++) {
for (int j = i + 1; j < len; j++) {
if (j - i + 1 > maxLen && validPalindromic(charArray, i, j)) {
maxLen = j - i + 1;
begin = i;
}
}
}
return s.substring(begin, begin + maxLen);
}
/**
* 验证子串 s[left..right] 是否为回文串
*/
private boolean validPalindromic(char[] charArray, int left, int right) {
while (left < right) {
if (charArray[left] != charArray[right]) {
return false;
}
left++;
right--;
}
return true;
}
}
时间复杂度:O(N) N为字符串 s 的长度
空间复杂度:O(1)
第二次commit AC
待更新
时间复杂度:O(N) N为字符串 s 的长度
空间复杂度:O(1)
4、总结
该题目的对大根堆的结构进行灵活的运用,并且能够想到对最大数减半操作收益是最大的。
❤️来自专栏《LeetCode基础算法题》欢迎订阅❤️
厂长写博客目的初衷很简单,希望大家在学习的过程中少走弯路,多学一些东西,对自己有帮助的留下你的赞赞👍或者关注➕都是对我最大的支持,你的关注和点赞给厂长每天更文的动力。
对文章其中一部分不理解,都可以评论区回复我,我们来一起讨论,共同学习,一起进步!