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

递减循环遍历法:

  1. 我们先定义一个判断回文串的方法:
// 判断回文子串
func ishw(s string) bool {
 for i, j := 0len(s)-1; i < j; {
  if s[i] != s[j] {//回文对比法,不同就不是回文串
   return false
  }
  i++
  j--
 }
 return true
}
  1. 思考题目逻辑,需要输出最长的回文串,就是说字符串可能整个回文,也可能部分回文,这时我们需要从整个字符串开始判断,然后逐渐缩短判断的长度,直到找到最长的回文串为止,这里要注意不要漏掉子串.
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 := 0len(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

分类:

后端

标签:

Golang

作者介绍

j
jaryue
V1