LeetCode 3. 无重复字符的最长子串

本文深入解析LeetCode第3题无重复字符的最长子串问题,通过两种不同的C++实现方案,探讨如何使用双指针及布尔数组高效解决此问题。文章对比了个人解决方案与他人优化方案的差异,特别指出在本地运行与在线提交结果不一致的困惑。

题目链接 LeetCode 3. 无重复字符的最长子串

解题思路

用两个指针分别移动,并用一个bool数组记录自字符是否出现过。

/*class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        int mm[300];
        int l=0,maxx;
        memset(mm,0,sizeof(mm));
        for(int i=0;i<s.size();i++) {
            if( ! (mm[(s[i]-0) ]) )
                mm[ (s[i]-0) ]=i+1;
            else {
                l=mm[s[i]-0];
                mm[s[i]-0]=i+1;
            }
            maxx=max(i+1-l,maxx);
        }
        return maxx;
    }
};//这个是自己的程序*/
//别人的程序
class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        int len = s.length();
        if(len == 0) return 0;
        int st = 0, en = 0;
        int ans = 0;
        bool ch[128];
        memset(ch, false, sizeof(ch));
        ch[s[0]] = true;
        while(en + 1 < len){
            while(en + 1 < len && !ch[s[en + 1]]){
                en ++;
                ch[s[en]] = true;
            }
            ans = max(ans, en - st);
            ch[s[st]] = false;
            st ++;
        }
        return ans + 1;
    }
};
//自己的程序不知道为什么在控制台上运行是正确答案,但提交后就是错误答案,这里是参考别人的代码写的。

自己有个疑惑,明明在控制台中运行“bbbbb”的时候是输出1,但是提交后就输出了3,很迷惑。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值