5. 最长回文子串

最长回文子串

题目描述:

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

示例 1:

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

输入:s = “cbbd”
输出:”bb”

提示:

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

思路:

时间复杂度:O(n^2),空间复杂度O()

代码:

func longestPalindrome(s string) string {
    n := len(s)
    dp := make([][]bool, n+1)

    for i :=0 ;i<=n;i++{
        dp[i] = make([]bool, n+1)
        dp[i][i] = true
    }
    res := string(s[0])
    for L:=2; L<=n;L++{
        for i:=0; i<n; i++{
            j := L + i -1
            if j>=n{
                continue 
            }
            if s[i] == s[j]{
                if j-1 == i{
                    dp[i][j] = true
                }else if  dp[i+1][j-1] == true{
                    dp[i][j] = true
                }
            }

            if dp[i][j] == true{
                if len(res) < j-i+1{
                    res = s[i:j+1]
                }
            }
        }

    }

    return res
}

代码效率:

执行用时:88 ms, 在所有 Go 提交中击败了37.51%的用户
内存消耗:6.7 MB, 在所有 Go 提交中击败了43.11%的用户


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!