LeetCode - 求最长的镜像字符串

开发 前端
LeetCode 算法到目前我们已经更新了 3 期,每期的内容不多,我们希望大家可以在上班路上阅读,长久积累会有很大提升。

[[435871]]

前言

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

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

不积跬步,无以至千里;不积小流,无以成江海,Swift社区 伴你前行。

难度水平:中等

1. 描述

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

2. 示例

示例 1

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

示例 2

  1. 输入:s = "cbbd" 
  2. 输出: "bb" 

示例 3

  1. 输入:s = "a" 
  2. 输出: "a" 

示例 4

  1. 输入:s = "ac" 
  2. 输出: "a" 

约束条件:

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

3. 答案

  1. class LongestPalindromicSubstring { 
  2.     func longestPalindrome(_ s: String) -> String { 
  3.         guard s.count > 1 else { 
  4.             return s 
  5.         } 
  6.          
  7.         let sChars = Array(s) 
  8.         var maxLen = 0, start = 0 
  9.          
  10.         for i in 0..<sChars.count { 
  11.             searchPalindrome(sChars, i, i, &start, &maxLen) 
  12.             searchPalindrome(sChars, i, i + 1, &start, &maxLen) 
  13.         } 
  14.          
  15.         return String(sChars[start..<start + maxLen]) 
  16.     } 
  17.      
  18.     private func searchPalindrome(_ chars: [Character], _ l: Int, _ r: Int, _ start: inout Int, _ maxLen: inout Int) { 
  19.         var l = l, r = r 
  20.          
  21.         while l >= 0 && r < chars.count && chars[l] == chars[r] { 
  22.             l -= 1 
  23.             r += 1 
  24.         } 
  25.          
  26.         if maxLen < r - l - 1 { 
  27.             start = l + 1 
  28.             maxLen = r - l - 1 
  29.         } 
  30.     } 
  • 主要思想:从中心的每个索引中找到最长的镜像字符串。
  • 时间复杂度: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/

 

责任编辑:姜华 来源: Swift社区
相关推荐

2021-11-24 09:08:38

LeetCode字符串算法

2021-11-15 07:47:40

字符串位置存储

2010-09-09 11:48:00

SQL函数字符串

2024-04-01 08:41:39

字符串.NET

2021-09-02 09:22:13

算法无重复字符

2021-03-08 08:23:24

Java字符串截取

2010-06-28 15:18:51

SQL Server

2016-12-29 15:58:00

字符串子串算法

2009-06-23 14:13:00

Java字符串

2016-12-29 17:07:59

字符算法代码

2009-07-16 17:01:09

Swing字符串

2011-08-10 18:47:18

Cocoa字符串

2023-01-11 16:49:13

MySQL数据库

2014-01-02 16:14:10

PostgreSQL字符串

2010-09-13 15:12:26

sql server字

2010-10-12 11:13:51

2010-11-26 10:43:48

MySQL分割字符串

2023-02-26 22:33:32

字符串排列算法

2021-05-18 09:08:18

字符串子串对象

2023-12-15 10:27:01

暴力匹配算法Python字符串
点赞
收藏

51CTO技术栈公众号