j
jaryue
V1
2023/03/28阅读:8主题:默认主题
leetcode5最长回文串
leetcode 5
题目描述
给你一个字符串 s,找到 s 中最长的回文子串。
如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。
示例 1:
输入:s = "babad" 输出:"bab" 解释:"aba" 同样是符合题意的答案。 示例 2:
输入:s = "cbbd" 输出:"bb"
提示:
1 <= s.length <= 1000 s 仅由数字和英文字母组成
来源:力扣(LeetCode) 链接:https://leetcode.cn/problems/longest-palindromic-substring 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解题思路
法1
递减循环遍历法:
-
我们先定义一个判断回文串的方法:
// 判断回文子串
func ishw(s string) bool {
for i, j := 0, len(s)-1; i < j; {
if s[i] != s[j] {//回文对比法,不同就不是回文串
return false
}
i++
j--
}
return true
}
-
思考题目逻辑,需要输出最长的回文串,就是说字符串可能整个回文,也可能部分回文,这时我们需要从整个字符串开始判断,然后逐渐缩短判断的长度,直到找到最长的回文串为止,这里要注意不要漏掉子串.
for i := len(s); i > 1; i-- { //回文长度大于二,i为取切片长度
for j := 0; i+j <= len(s); j++ {//j为起始位置,取完所有的子串判断是否为回文串
if ishw(s[j : i+j]) {
return s[j : i+j]
}
}
}
return s[:1]//如果小于2就返回第一个字符就可以了
}
执行结果
法1
// 判断回文子串
func ishw(s string) bool {
for i, j := 0, len(s)-1; i < j; {
if s[i] != s[j] {//回文对比法,不同就不是回文串
return false
}
i++
j--
}
return true
}
func longestPalindrome(s string) string {
for i := len(s); i > 1; i-- { //回文长度大于二,i为取切片长度
for j := 0; i+j <= len(s); j++ {//j为起始位置,取完所有的子串判断是否为回文串
if ishw(s[j : i+j]) {
return s[j : i+j]
}
}
}
return s[:1]//如果小于2就返回第一个字符就可以了
}
执行结果: 通过 显示详情 查看示例代码 添加备注
执行用时: 48 ms , 在所有 Go 提交中击败了 44.14% 的用户 内存消耗: 2.3 MB , 在所有 Go 提交中击败了 51.54% 的用户 通过测试用例: 141 / 141
作者介绍
j
jaryue
V1