LeetCode 5. Longest Palindromic Substring (Medium)

题目

 
Given a string s, return the longest palindromic substring in s.

Example 1:

Input: s = "babad"
Output: "bab"
Explanation: "aba" is also a valid answer.

Example 2:

Input: s = "cbbd"
Output: "bb"

Constraints:

1 <= s.length <= 1000

s consist of only digits and English letters.

 

思路

解法(Java):

对s中的每一位,以其为中心向左右扩大子串范围,判断子串是否是回文串。

需要注意,

以某一位为中心向两边扩大(1) 和 以中间两位为中心向两边扩大(2) 2种情况。

当当前位与右边相邻位相同时,可能出现情况2,右指针向右移直到右相邻位不同。

如“abbbbcd”,当i为1,指向b,left,right初始化为i的值,即为1,指向b。

right指针发现right+1位即2号也为b,则right向右移,直到right指向4号位时,发现右边相邻位不是b了,跳出循环。

下一轮i不必从i的下一位2号位开始,而是直接从right的下一位5号位开始。

class Solution {
    public String longestPalindrome(String s) {
        int len = s.length();
        int maxLen = 0;
        int start = 0;
        for(int i = 0; i < len;){
            if(len-i <= maxLen/2) break;
            int left = i, right = i;
            //回文串为偶数的情形
            while(right+1 < len && s.charAt(right) == s.charAt(right+1)) right++;
            //对i的处理
            i = right+1;
            while(left >= 0 && right <= len-1){
                if(s.charAt(left) != s.charAt(right)) break;
                if(right-left+1 > maxLen){
                    maxLen = right - left + 1;
                    start = left;
                }
                left--;
                right++;
            }
        }
        return s.substring(start, start + maxLen);
    }
}
posted @ 2021-12-30 01:12  红鲤鱼绿鲤鱼与阿米娅  阅读(32)  评论(0)    收藏  举报