C++无重复字符的最长字串(滑动窗口)

题目要求:

解题思路:
使用两个指针 `index1` 和 `index2` 来维护一个滑动窗口,然后在窗口内查找最长不重复子串的长度。如果在窗口内发现重复字符,就更新指针的位置以继续查找。最终,返回找到的最长不重复子串的长度。

示例代码:

    int lengthOfLongestSubstring(string s) {
        int max = 0;        // 用于存储最长不重复子串的长度
        int index1 = 1;     // 第一个指针
        int index2 = 0;     // 第二个指针
        if (s.length() == 1) return 1;  // 如果字符串只包含一个字符,则返回 1 作为最长不重复子串的长度
        if (s[0] == s[1]) max = 1;     // 如果字符串的前两个字符相同,将 max 设置为 1

        for (int i = index1; i < s.length(); i++) {
            int cnt = 1;  // 用于计算当前子串的长度,初始化为 1
            for (int j = index2; j < i; j++) {
                if (s[i] == s[j]) {  // 如果当前字符与之前的字符重复
                    index1 = j + 2;  // 更新第一个指针,跳过重复字符的位置
                    index2 = j + 1;  // 更新第二个指针,重新开始计算子串
                    break;           // 退出内层循环
                }
                cnt++;  // 如果字符不重复,增加 cnt 的值
            }
            if (cnt >= max) {
                max = cnt;  // 如果当前子串的长度大于等于 max,更新 max 的值
            }
        }
        return max;  // 返回最长不重复子串的长度
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值