刷题使我快乐,满脸开心.jpg
- 来源:力扣(LeetCode)
- 链接:https://leetcode.cn/problems/longest-palindromic-substring/
- 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
题目
给你一个字符串 s
,找到 s
中最长的回文子串。
如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。
示例 1:
输入:s = "babad"
输出:"bab"
解释:"aba" 同样是符合题意的答案。
示例 2:
输入:s = "cbbd"
输出:"bb"
提示:
1 <= s.length <= 1000
s
仅由数字和英文字母组成
思路
挨个元素尝试是否可以当做中心位置(中心为单点或者双点),然后如果找到了更长子串则更新长度
注意好边界判断即可
代码
func longestPalindrome(s string) string {
if s == "" {
return ""
}
start, end := 0, 0
for i := 0; i < len(s); i++ {
left, right := expandAroundCenter(s, i, i)
if right - left > end - start {
start, end = left, right
}
if i < len(s)-1 && s[i] == s[i+1] {
left, right = expandAroundCenter(s, i, i + 1)
if right - left > end - start {
start, end = left, right
}
}
}
return s[start:end+1]
}
func expandAroundCenter(s string, left, right int) (int, int) {
for ; left >= 0 && right < len(s) && s[left] == s[right]; left, right = left-1 , right+1 { }
return left + 1, right - 1
}