解题思路
这道题很中规中矩,题目是给定一个字符串,查找在没有重复字符的情况下最长的子串的长度。
用一个数组实时统计每个字母的出现次数,边走边数就行了。
代码
int lengthOfLongestSubstring(string s) {
static const int DICT_SIZE = 256;
int ls = s.size();
if (ls < 2) {
return ls;
}
vector<int> c(DICT_SIZE, 0);
int i, j;
int res = 0;
j = 0;
for (i = 0; i < ls; ++i) {
++c[s[i]];
if (c[s[i]] > 1) {
while (c[s[i]] > 1) {
--c[s[j++]];
}
}
res = max(res, i - j + 1);
}
c.clear();
return res;
}
复杂度
走一遍字符串,O(n)