159 至多包含两个不同字符的最长子串

给定字符串s,求至多包含两个不同字符的最长子串t及其长度。例如输入'eceba',输出3,子串'ece'。方法1采用滑动窗口和哈希统计,当元素数量超过2时缩小窗口至数量为2。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

示例 1:
输入: “eceba”
输出: 3
解释: t 是 “ece”,长度为3。

示例 2:
输入: “ccaabbb”
输出: 5
解释: t 是 “aabbb”,长度为5。

方法1:
主要思路:
(1)使用滑动窗口,加哈希统计;
(2)当统计的元素数量是3时,需要减小窗口内的元素, 直到元素的数量再次达到2,停止;

class Solution {
   
public:
    int lengthOfLongestSubstringTwoDistinct(string s) {
   
    	//特殊的情形直接返回
        if(s.size()<
### 可达鸭编程题无重复字符长子解决方案 对于无重复字符长子问题,一种常见的解决办法是采用滑动窗口的方法来处理这个问题。这种方法能够有效地找到给定字符串中的不含有重复字符。 #### 滑动窗口算法解题思路 通过维护两个指针`left`和`right`形成一个窗口,在遍历过程中调整这两个指针的位置以确保窗口内的所有字符都是唯一的。当遇到重复字符时,则移动左边界直到移除掉这个重复项为止。在此期间记录下大长度以及对应的起始位置即可得到终的结果[^3]。 #### 代码实现 下面是一个基于上述思想的具体Python实现: ```python def length_of_longest_substring(s: str) -> int: char_map = {} left = 0 max_length = 0 for right in range(len(s)): if s[right] in char_map: left = max(char_map[s[right]], left) max_length = max(max_length, right - left + 1) char_map[s[right]] = right + 1 return max_length ``` 此函数接收一个字符串参数`s`返回其不含重复字符大连续序列的长度。这里使用了一个典`char_map`用于存储已经访问过的字符及其新出现的位置索引;变量`max_length`用来保存当前发现的大非重叠区域大小。 #### 性能分析 该算法的时间复杂度为O(n),其中n表示输入字符串s的长度。因为每个字符至多只会被左右指针各扫描一次。空间复杂度取决于字符集的大小,通常情况下不会超过常量级别(O(1)),但如果考虑ASCII之外更广泛的Unicode编码,则可能达到O(m),m代表不同种类字符的数量。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值