一篇聊聊最长未重复子字符串

开发 前端
使用字典存储非重复子字符串的下一个可能有效字符的位置,然后迭代字符串更新 maxLen、dictionary 和遇到重复时的 startIdx。

[[434992]]

前言

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

该算法题解的 github 仓库地址是:https://github.com/soapyigu/LeetCode-Swift[2]

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

1. 描述

给定一个字符串 s , 找出最长未重复的子字符串的长度。

2. 示例

示例 1

  1. 输入:s = "abcabcbb" 
  2. 输出:3 
  3. 解释:最长未重复子字符串答案是"abc",长度为 3。 

示例 2

  1. 输入:s = "bbbbb" 
  2. 输出:1 
  3. 解释:最长未重复子字符串答案是"b",长度为 1。 

示例 3

  1. 输入:s = "pwwkew" 
  2. 输出:1 
  3. 解释:最长未重复子字符串答案是"wke",长度为 3。注意答案必须是子字符串,“pwke” 是一个子列,而不是一个子字符串。 

示例 4

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

3. 答案

  1. class LongestSubstringWithoutRepeatingCharacters { 
  2.     func lengthOfLongestSubstring(_ s: String) -> Int { 
  3.         var maxLen = 0, startIdx = 0, charToPos = [CharacterInt]() 
  4.         let sChars = Array(s) 
  5.          
  6.         for (i, charin sChars.enumerated() { 
  7.             if let pos = charToPos[char] { 
  8.                 startIdx = max(startIdx, pos) 
  9.             } 
  10.              
  11.             // update to next valid position 
  12.             charToPos[char] = i + 1 
  13.             maxLen = max(maxLen, i - startIdx + 1) 
  14.         } 
  15.          
  16.         return maxLen 
  17.     } 

主要思想:使用字典存储非重复子字符串的下一个可能有效字符的位置,然后迭代字符串更新 maxLen、dictionary 和遇到重复时的 startIdx。

 

  • 时间复杂度:O(n)
  • 空间复杂度:O(n)

 

责任编辑:武晓燕 来源: Swift社区
相关推荐

2021-12-08 14:02:20

符串排列搜索

2021-11-29 08:49:37

字符串转换整数

2023-03-07 10:07:04

JavaScript字符串反斜杠

2021-05-28 10:02:05

Swift5 字符串String

2021-09-02 09:22:13

算法无重复字符

2021-07-03 10:02:30

Python字符串浏览器

2021-03-11 10:00:32

Java字符串开发

2021-03-04 08:34:54

Java交换变量字符串基础

2022-05-26 09:31:20

Java字符串

2021-11-19 09:00:24

LeetCode字符串算法

2022-09-26 00:00:02

字符串数据结构

2023-07-31 07:48:43

Java内存虚拟机

2023-09-21 08:05:49

Mybatis插件开发

2022-06-30 22:53:18

数据结构算法

2016-12-29 15:58:00

字符串子串算法

2023-08-03 07:34:34

格式化字符串参数

2017-12-11 13:50:17

LinuxBash子字符串

2024-01-03 08:20:05

Java字符串性能

2022-06-02 07:11:13

JVMJava

2011-05-18 09:50:53

Oracle存储
点赞
收藏

51CTO技术栈公众号