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

C++代码出现运行时错误无输出,求排查最长无重复字符子串解法

解决最长无重复字符子串的运行时错误问题

老兄,我太懂你碰到这种运行时错误+无输出的糟心情况了——明明逻辑想的没问题,程序却直接崩掉连个报错都不给。咱们先从你提到的notin辅助函数和常见坑点说起,再给你捋捋正确的实现思路。

先排查可能导致崩溃的常见原因

你提到写了notin函数检查字符是否在子串中,这大概率是第一个踩坑点:

  • 最常见的是字符串索引越界:比如遍历子串时,循环条件写成了i <= s.size()而不是i < s.size(),直接访问了字符串末尾之后的内存,触发运行时错误,程序直接崩溃,自然没输出。
  • 其次是维护当前子串时的逻辑错误:比如拼接子串时没有正确控制起始/结束位置,或者变量初始化错误(比如最大长度初始值设成负数,导致后续更新逻辑混乱)。

推荐的高效实现:滑动窗口法

暴力遍历所有子串的方法(比如你用notin逐个检查)不仅效率低(时间复杂度O(n²)),还容易踩各种边界坑。这里给你用滑动窗口+哈希表的最优解法,时间复杂度O(n),还能避免很多错误:

#include <iostream>
#include <string>
#include <unordered_map>
using namespace std;

int lengthOfLongestSubstring(string s) {
    unordered_map<char, int> charIndex; // 记录每个字符最后出现的索引
    int maxLen = 0;
    int left = 0; // 滑动窗口左边界

    for (int right = 0; right < s.size(); right++) {
        // 如果当前字符已经在窗口内出现过,更新左边界到重复字符的下一位
        if (charIndex.find(s[right]) != charIndex.end() && charIndex[s[right]] >= left) {
            left = charIndex[s[right]] + 1;
        }
        // 更新当前字符的最新索引
        charIndex[s[right]] = right;
        // 计算当前窗口长度,更新最大长度
        maxLen = max(maxLen, right - left + 1);
    }
    return maxLen;
}

int main() {
    // 测试示例
    cout << lengthOfLongestSubstring("abcabcbb") << endl; // 输出3
    cout << lengthOfLongestSubstring("bbbbb") << endl;    // 输出1
    cout << lengthOfLongestSubstring("pwwkew") << endl;   // 输出3
    return 0;
}

代码解释

  • 用unordered_map记录每个字符最近一次出现的位置,这样不用每次遍历子串检查重复,直接O(1)查询。
  • left和right分别代表滑动窗口的左右边界,窗口内就是当前无重复的子串。
  • 每次移动right时,若发现当前字符已在窗口内,就把left移到重复字符的下一位,保证窗口内始终无重复。

如果你坚持用暴力法(修正notin函数)

要是你想先把自己的暴力写法改对,那先把notin函数的越界问题修好:

bool notin(char x, const string& s) {
    for (int i = 0; i < s.size(); i++) { // 注意是i < s.size(),不是<=
        if (s[i] == x) {
            return false;
        }
    }
    return true;
}

然后主函数里的逻辑也要注意边界:比如遍历每个起始位置,然后逐个往后加字符,直到遇到重复的,记录长度。但这种方法对于长字符串(比如10000+字符)会超时,所以还是更推荐滑动窗口法。

最后提醒

运行时错误无输出,大概率是内存访问越界或者空指针问题,你可以用调试工具(比如GDB)断点调试,看看程序崩溃在哪一行,就能快速定位问题啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 03:53:43