You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

二分查找求解最长无重复子串时的错误排查

最长无重复字符子串长度实现的错误分析

问题背景

给定字符串s,找出最长无重复字符子串的长度。示例输入s="pwwkew",输出3(对应子串"wke")。以下是实现代码,但在该测试用例上出现WA:

class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        int n = s.size() ;
        vector<char> s1 ;
        int maxi = 0 ;
        
        for(int i = 0;i<n;i++){
            if(binary_search(s1.begin(),s1.end(),s[i])){
                s1.clear();
            }
            
            s1.push_back(s[i]);
            int p = s1.size() ;
            maxi = max(maxi , p) ;
            
        }
        return maxi ;
        
    }
};

错误点分析

  • binary_search使用前提错误:binary_search函数要求容器内元素必须是已排序状态,否则查找结果是未定义的。你的vector<char> s1是按字符在原字符串中的出现顺序插入的,并非有序结构。比如当s1为[w,k,e]时,字符的ASCII码顺序是e < k < w,但s1内是逆序存储,binary_search无法在这种无序容器中正确定位到已存在的w,导致重复字符被误判为不存在,进而出现[w,k,e,w]这种包含重复字符的错误情况。
  • 重复字符处理逻辑错误:即使binary_search能正确找到重复字符,直接清空整个s1的做法也不合理。遇到重复字符时,正确逻辑应该是移除重复字符及其之前的所有元素,保留重复字符之后的有效子串再添加当前字符,而不是直接清空容器,这会丢失原本可以保留的有效子串,导致无法统计到最长的无重复子串。

内容的提问来源于stack exchange,提问作者Avik Pathak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 10:20:43