您现在的位置是:亿华云 > 人工智能

LeetCode - 求最长的镜像字符串

亿华云2025-10-03 06:38:49【人工智能】4人已围观

简介前言我们社区陆续会将顾毅(Netflix 增长黑客,《iOS 面试之道》作者,ACE 职业健身教练。微博:@故胤道长[1])的 Swift 算法题题解整理为文字版以方便大家学习与阅读。LeetCode

前言

我们社区陆续会将顾毅(Netflix 增长黑客,求最《iOS 面试之道》作者,长的串ACE 职业健身教练。镜像微博:@故胤道长[1])的字符 Swift 算法题题解整理为文字版以方便大家学习与阅读。

LeetCode 算法到目前我们已经更新了 3 期,求最我们会保持更新时间和进度(周一、长的串周三、镜像周五早上 9:00 发布),云南idc服务商字符每期的求最内容不多,我们希望大家可以在上班路上阅读,长的串长久积累会有很大提升。镜像

不积跬步,字符无以至千里;不积小流,求最无以成江海,长的串Swift社区 伴你前行。亿华云镜像

难度水平:中等

1. 描述

给定一个字符串 s, 返回 s 中的最长回文子字符串.

2. 示例

示例 1

输入:s = "babad" 输出: "bab" 解释: "aba" 同样是有效答案。 

示例 2

输入:s = "cbbd" 输出: "bb" 

示例 3

输入:s = "a" 输出: "a" 

示例 4

输入:s = "ac" 输出: "a" 

约束条件:

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

3. 答案

class LongestPalindromicSubstring {      func longestPalindrome(_ s: String) -> String {          guard s.count > 1 else {              return s         }         let sChars = Array(s)         var maxLen = 0, start = 0         for i in 0..<sChars.count {              searchPalindrome(sChars, i, i, &start, &maxLen)             searchPalindrome(sChars, i, i + 1, &start, &maxLen)         }         return String(sChars[start..<start + maxLen])     }     private func searchPalindrome(_ chars: [Character], _ l: Int, _ r: Int, _ start: inout Int, _ maxLen: inout Int) {          var l = l, r = r         while l >= 0 && r < chars.count && chars[l] == chars[r] {              l -= 1             r += 1         }         if maxLen < r - l - 1 {              start = l + 1             maxLen = r - l - 1         }     } }  主要思想:从中心的每个索引中找到最长的镜像字符串。 时间复杂度:O(n^2) 空间复杂度:O(1)

该算法题解的 github 仓库是:LeetCode-Swift[2]

点击前往 LeetCode[3] 练习

参考资料

[1]@故胤道长: https://m.weibo.cn/u/1827884772

[2]LeetCode-Swift: https://github.com/soapyigu/LeetCode-Swift

[3]LeetCode: https://leetcode.com/problems/longest-palindromic-substring/

服务器租用

很赞哦!(8)