解题思路
用两个指针分别移动,并用一个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,很迷惑。

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

被折叠的 条评论
为什么被折叠?



