1.题目描述
给你一个字符串 s
,找到 s
中最长的回文子串。
示例一:
输入:s = "babad"
输出:"bab"
解释:"aba" 同样是符合题意的答案。
示例二:
输入:s = "cbbd"
输出:"bb"
示例三:
输入:s = "a"
输出:"a"
2.解题思路
根据题目的意思我们可以知道简单的循环暴力解法加上判断字符串是否是回文字符串时间可能会超出限制。所以我们在判断回文字符串的时候采用双指针的思想,运用中心扩展法来解决问题。
因为回文串是中心对称的,我们可以先枚举子串的中心,然后从中心处向两边探测,直到发现两端字符不相等或者到达字符串边缘。
2.1 中心扩散法
暴力法采用双指针两边夹,验证是否是回文子串,时间复杂度比较高,除了枚举字符串的左右边界以外,比较容易想到的是枚举可能出现的回文子串的“中心位置”,从“中心位置”尝试尽可能扩散出去,得到一个回文串。
因此,中心扩散法的思路是:遍历每一个索引,以这个索引为中心,利用“回文串”中心对称的特点,往两边扩散,看最多能扩散多远。
枚举“中心位置”