Leetcode5. 最长回文子串

154 阅读1分钟

Leetcode5. 最长回文子串

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第2天,点击查看活动详情

❤️‍欢迎订阅java厂长《LeetCode每日一题》 ❤️‍

1、题目📑

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

实例1

输入:s = "babad"

输出:"bab"

解释:"aba" 同样是符合题意的答案。

实例2

输入: s = "cbbd"

输出: "bb"

提示

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

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基础算法题》欢迎订阅❤️‍

厂长写博客目的初衷很简单,希望大家在学习的过程中少走弯路,多学一些东西,对自己有帮助的留下你的赞赞👍或者关注➕都是对我最大的支持,你的关注和点赞给厂长每天更文的动力。

对文章其中一部分不理解,都可以评论区回复我,我们来一起讨论,共同学习,一起进步!

原题链接:5. 最长回文子串 - 力扣(LeetCode)