0
点赞
收藏
分享

微信扫一扫

力扣专题刷题-模拟:最长回文子串

就是耍帅 2022-02-13 阅读 50
leetcode

最长回文子串


题目描述

最长回文子串


思路

模拟

枚举字符串s中的每一位,作为回文串的中心点,左右进行扩展,直到达到边界或者不满足回文串定义为止。

Java实现

class Solution {
    public String longestPalindrome(String s) {
        String ans = "";
        for (int i = 0; i < s.length(); ++i) {
            // 回文串长度为奇数
            int l = i-1, r = i+1;
            String sub = getString(s, l, r);
            if (sub.length() > ans.length()) ans = sub;
            
            // 回文串长度为偶数
            l = i-1;
            r = i+1-1;
            sub = getString(s, l, r);
            if (sub.length() > ans.length()) ans = sub;
        }
        return ans;
    }
    
    private String getString(String s, int l, int r) {
        while (l >= 0 && r < s.length() && s.charAt(l) == s.charAt(r)) {
            l--;
            r++;
        }
        return s.substring(l+1, r);
    }
}

Python实现

class Solution:
    def longestPalindrome(self, s: str) -> str:
        ans, n = "", len(s)
        
        def getString(l, r):
            while l >= 0 and r < n and s[l] == s[r]:
                l -= 1
                r += 1
            return s[l+1:r]
        
        for i in range(n):
            l, r = i-1, i+1
            sub = getString(l, r)
            if (len(sub) > len(ans)):
                ans = sub
            
            l, r = i-1, i+1-1
            sub = getString(l, r)
            if (len(sub) > len(ans)):
                ans = sub
        return ans
举报

相关推荐

0 条评论