算法探索_最长回文子串

问题描述:

给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。

示例 1:

输入: "babad"
输出: "bab"
注意: "aba" 也是一个有效答案。
示例 2:

输入: "cbbd"
输出: "bb"

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-palindromic-substring

解决思路:

根据当前最大回文串的长度 maxLength 来调整遍历跨度( i 的上限和 j 的起点 ),找到最大的可能性

    /*
     *作者:赵星海
     *时间:2020/9/2 15:09
     *用途:最长回文子串
     */
    public String longestPalindrome(String s) {
        int length = s.length();
        if (length < 2) return s;
        int maxLength = 1;//最大回文串的终点
        int start = 0;//最大回文串的起点
        char[] chars = s.toCharArray();
        for (int i = 0; i < length - maxLength; i++) {
            for (int j = i + maxLength; j < length; j++) {
                if (valid(chars, i, j)) {
                    maxLength = j - i + 1;
                    start = i;
                }
            }
        }
        return s.substring(start, start + maxLength);
    }

    //判断该段落是否是回文串
    public boolean valid(char[] chars, int left, int right) {
        while (left < right) {
            if (chars[left] != chars[right]) return false;
            left++;
            right--;
        }
        return true;
    }

猜你喜欢

转载自blog.csdn.net/qq_39731011/article/details/108362948
今日推荐