给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
示例 1:
输入: s = “abcabcbb”
输出: 3
解释: 因为无重复字符的最长子串是 "abc"所以其长度为 3。
这题滑动窗口的方法还挺简洁的,在力扣上可以看大佬分享的,我自己的笨方法如下,当输入 是空格时的问题还没法正确输出,别的还可以 结果图片放下面
class Solution {
public:
int lengthOfLongestSubstring(string s) {
int len=s.size();//len为字符串s的长度
int max=0;
for(int i=0;i<len;i++){
bool num[100]={false};
bool dletter[100]={false};
bool uletter[100]={false};
int temp=0;
for(int j=i;j<len;j++){
if(('0'<=s[j]&&s[j]<='9')&&(num[s[j]-'0']==false)){
num[s[j]-'0']=true;
temp++;
}
else if(('a'<=s[j]&&s[j]<='z')&&(dletter[s[j]-'a']==false)){
dletter[s[j]-'a']=true;
temp++;
}
else if('A'<=s[j]&&s[j]<='Z'&&uletter[s[j]-'A']==false){
uletter[s[j]-'A']=true;
temp++;
}else break;
}
if(temp>max)
max=temp;
}
return max;
}
};
加一个大佬的代码
class Solution {
public:
int lengthOfLongestSubstring(string s) {
int len = s.size();//len为字符串s的长度
int max = 0;
for (int i = 0; i < len; i++) {
int temp = 0;
bool num[1000] = { false };
memset(num, false, sizeof(num));
for (int j = i; j < len; j++) {
if (!num[s[j]]) {
num[s[j]] = true;
temp++;
}
else break;
}
if (temp > max)
max = temp;
}
return max;
}
};