题目描述
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
样例
输入: "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3
算法1
(字符串缓存) $O(n)$
遍历整个字符串,把不重复的字符串放到缓存中;
时间复杂度
时间复杂度应该是$O(n)$,但是不太确定,因为我不知道string.find()函数的时间消耗;
参考文献
C++ 代码
class Solution {
public:
int lengthOfLongestSubstring(string s) {
string buffer;
int max = 0;
int npos = 0;
for (int i = 0; i < s.size(); i++){
npos = buffer.find(s[i]);
if (string::npos != npos){
// 包含有这个字符串
if (buffer.size() > max){
max = buffer.size();
}
buffer.erase(0, npos+1);
}
buffer += s[i];
}
if (buffer.size() > max){
max = buffer.size();
}
return max;
}
};