首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >LeetCode - #159 至多包含两个不同字符的最长子串(会员题)

LeetCode - #159 至多包含两个不同字符的最长子串(会员题)

原创
作者头像
Swift社区
发布2024-12-28 23:08:51
发布2024-12-28 23:08:51
1680
举报
文章被收录于专栏:Swift社区Swift社区

前言

本题为 LeetCode 的高级会员解锁题

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

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

不积跬步,无以至千里;不积小流,无以成江海,Swift社区 伴你前行。如果大家有建议和意见欢迎在文末留言,我们会尽力满足大家的需求。

难度水平:中等

1. 描述

给定一个字符串 s ,找出 至多 包含两个不同字符的最长子串 t ,并返回该子串的长度。

2. 示例

示例 1

代码语言:txt
复制
输入: "eceba"
输出: 3
解释: t 是 "ece",长度为3。

示例 2

代码语言:txt
复制
输入: "ccaabbb"
输出: 5
解释: t 是 "aabbb",长度为5。

约束条件:

  • 1 <= s.length <= 10^5
  • s 由英文字母组成

3. 答案

代码语言:swift
复制
class LongestSubstringMostTwoDistinctCharacters {
    func lengthOfLongestSubstringTwoDistinct(_ s: String) -> Int {
        var start = 0, longest = 0, charFreq = [Character: Int]()
        let sChars = Array(s)
        
        for (i, char) in sChars.enumerated() {
            if let freq = charFreq[char] {
                charFreq[char] = freq + 1
            } else {
               if charFreq.count == 2 {
                    longest = max(longest, i - start)
                    
                    while charFreq.count == 2 {
                        let charStart = sChars[start]
                        charFreq[charStart]! -= 1
                        
                        if charFreq[charStart] == 0 {
                            charFreq[charStart] = nil
                        }
                        
                        start += 1
                    }   
                }
                
                charFreq[char] = 1
            }
        }
        
        return max(longest, sChars.count - start)
    }
}
  • 主要思想:Slding 窗口,使用字典检查子字符串是否有效,并注意处理字符串结束的情况。
  • 时间复杂度: O(n)
  • 空间复杂度: O(n)

该算法题解的仓库:LeetCode-Swift

点击前往 LeetCode 练习

关于我们

我们是由 Swift 爱好者共同维护,我们会分享以 Swift 实战、SwiftUI、Swift 基础为核心的技术内容,也整理收集优秀的学习资料。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 1. 描述
  • 2. 示例
  • 3. 答案
  • 关于我们
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档