搜索

LeetCode - 求最长的镜像字符串

发表于 2025-11-05 03:42:41 来源:全栈开发

前言

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

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

不积跬步,字符无以至千里;不积小流,求最无以成江海,长的串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/

IT技术网
随机为您推荐
版权声明:本站资源均来自互联网,如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

Copyright © 2016 Powered by LeetCode - 求最长的镜像字符串,全栈开发  滇ICP备2023006006号-32sitemap

回顶部