# 5. 最长回文子串

## Link

{% embed url="<https://leetcode.cn/problems/longest-palindromic-substring/>" %}

## Problem

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

如果字符串的反序与原始字符串相同，则该字符串称为回文字符串。

示例 1：

{% code overflow="wrap" %}

```
输入：s = "babad"
输出："bab"
解释："aba" 同样是符合题意的答案。
```

{% endcode %}

示例2：

{% code overflow="wrap" %}

```
输入：s = "cbbd"
输出："bb"
```

{% endcode %}

提示：

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

## Solution

{% tabs %}
{% tab title="Go" %}

```go
func longestPalindrome(s string) string {
    n := len(s)
    dp := make([][]bool, n)
    for i:=range dp {
        dp[i] = make([]bool, n)
        dp[i][i] = true
    }
    start, max := 0, 1
    for i := n-2; i >= 0 ; i-- {
        for j := i+1; j < n; j++ {
            if s[i] == s[j] {
                if j-i < 3 {
                    dp[i][j] = true
                }else{
                    dp[i][j] = dp[i+1][j-1]
                }
            }
            if dp[i][j] && j-i+1>max {
                start = i
                max = j-i+1
            }
        } 
    }
    return s[start:start+max]
}
```

{% endtab %}

{% tab title="C++" %}

```cpp
```

{% endtab %}
{% endtabs %}
