Problem: 3. 无重复字符的最长子串
文章目录
- 题目描述
- 思路及解法
- 复杂度
- Code
题目描述
思路及解法
1.川建一个set集合存储最长的无重复的字符;
2.创建双指针p、q,每次当q指针指向的字符不在set集合中时将其添加到set集合中让q指针后移,并且更新无重复字符串的最大长度,当q指向的字符在set集合中时,抹去p指针指向的字符
复杂度
时间复杂度:
O ( n ) O(n) O(n);其中 n n n为字符串 s s s的长度
空间复杂度:
O ( n ) O(n) O(n)
Code
class Solution {
public:
/**
* Two Pointer
*
* @param s Given string
* @return int
*/
int lengthOfLongestSubstring(string s) {
int n = s.length();
if (n == 0) {
return 0;
}
unordered_set<char> set;
int p = 0;
int q = 0;
int maxLen = 0;
while (q < n) {
if (!set.count(s[q])) {
set.insert(s[q]);
q++;
maxLen > q - p ? maxLen : q - p;
continue;
}
while (set.count(s[q])) {
set.erase(s[p]);
p++;
}
}
return maxLen;
}
};