LeetCode Minimum Window Substring(最小窗口子串)代码错误排查
错误原因分析
1. 合法窗口判断逻辑错误
你实现的check_map函数要求窗口字符计数和模式串计数完全相等,不符合题目要求。题目仅要求窗口包含t的所有字符(含重复项),也就是窗口对应字符的计数大于等于t的计数即可,不需要完全相等。
比如当窗口内有2个'A',而t只需要1个'A'时,当前窗口仍然是合法的,但你的判断逻辑会直接返回false,导致内层while循环提前终止,无法继续收缩左边界找到更小的窗口,这也是你第一个测试用例得到ADOBEC而不是更短的BANC的核心原因。
修正方案:将check_map函数中的判断条件修改为:
if(strr[data.first] < data.second) return false;
2. substr参数使用错误
C++中std::string::substr的第二个参数是要截取的子串长度,不是子串的结束下标。你当前传入的end+1仅在start=0时刚好得到正确长度,当start不为0时,截取的子串长度会远大于预期,导致即使找到了正确的窗口边界,存储到ans里的也是错误的长字符串。
修正方案:将截取子串的代码修改为:
ans = s.substr(start, end - start + 1);
补充说明
如果编译时提示INT_MAX未定义,需要额外引入头文件#include <climits>。
内容的提问来源于stack exchange,提问作者Dipesh Kurasau
相关产品推荐
相关产品推荐

