模拟卷Leetcode【普通】005. 最长回文子串

005. 最长回文子串

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

示例 1:

输入:s = “babad”
输出:“bab”
解释:“aba” 同样是符合题意的答案。
示例 2:

输入:s = “cbbd”
输出:“bb”
示例 3:

输入:s = “a”
输出:“a”
示例 4:

输入:s = “ac”
输出:“a”

提示:

1 <= s.length <= 1000
s 仅由数字和英文字母(大写和/或小写)组成

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-palindromic-substring
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

代码:

import time
from typing import List


class Solution:
    def __init__(self):
        pass

    def longestPalindrome(self, s: str) -> str:
        length = len(s)
        if length == 1: return s
        # 创建动态规划dynamic programing表
        dp = [[False for _ in range(length)] for _ in range(length)]
        # 初始长度为1,这样万一不存在回文,就返回第一个值(初始条件设置的时候一定要考虑输出)
        max_len = 1
        start = 0
        for right in range(1, length):
            for left in range(right):
                # 有两种情况是回文:如果是相邻两个数,相等即可;或者两头相等,去掉两头的中间是回文;
                if (right - left <= 2 and s[left] == s[right]) or (right - left > 2 and s[left] == s[right] and dp[left + 1][right - 1]):
                    dp[left][right] = True
                    if max_len < right - left + 1:  # 返回的是最长回文子串的第一个
                        max_len = right - left + 1
                        start = left
        return s[start:start + max_len]


def test(data_test):
    s = Solution()
    return s.longestPalindrome(*data_test)

if __name__ == '__main__':
    datas = [
        ["babad"],  # bab
        ["cbbd"],  # bb
        ["a"],  # a
        ["ac"],  # a
    ]
    for data_test in datas:
        t0 = time.time()
        print('-' * 50)
        print('input:', data_test)
        print('output:', test(data_test))
        print(f'use time:{
      
      time.time() - t0}s')

备注:
GitHub:https://github.com/monijuan/leetcode_python

CSDN汇总:模拟卷Leetcode 题解汇总_卷子的博客-CSDN博客

可以加QQ群交流:1092754609

leetcode_python.utils详见汇总页说明
先刷的题,之后用脚本生成的blog,如果有错请留言,我看到了会修改的!谢谢!

おすすめ

転載: blog.csdn.net/qq_34451909/article/details/121405963
おすすめ