题目描述
给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度
样例
示例 1:
输入: s = "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
示例 2:
输入: s = "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
哈希表 c语言
int lengthOfLongestSubstring(char * s){
int n = strlen(s);
int Hash[256];
int max = 0;
memset(Hash,0,sizeof(Hash));
int i = 0, j = -1;
while(j < n-1){
j++;
Hash[s[j]]++;
while(Hash[s[j]]>1){
Hash[s[i]]--;
++i;
}
if(j-i+1>max){
max = j - i +1;
}
}
return max;
}
C++ 同向双指针+哈希表
class Solution {
public:
int lengthOfLongestSubstring(string s) {
int n = s.size(),ans = 0, left = 0, right;
unordered_map<char,int> cnt;
for(right = 0; right < n; ++right){
char c = s[right];
++cnt[c];
while(cnt[c] > 1){
--cnt[s[left++]];
}
ans = max(ans, right - left + 1);
}
return ans;
}
};