【发布时间】:2016-12-14 21:18:28
【问题描述】:
问题:
给定一个字符串,找出最长的不重复字符的子字符串的长度。
例子:
给定“abcabcbb”,答案是“abc”,长度为3。
解决方案:
int lengthOfLongestSubstring(char* s) {
if (s == NULL) {
return 0;
}
myHash hash;
int start = 0;
int end = 0;
int maxLen = 0;
while (s[end] != '\0') {
char c = s[end];
if (hash.find(c) == hash.end()) {
hash[c] = end;
end++;
}else {
if (end - start > maxLen) {
maxLen = end - start;
}
int index = hash[c];
while(start <= index) {
hash.erase(s[start]);
start++;
}
}
}
if (end - start > maxLen) {
maxLen = end - start;
}
return maxLen;
}
复杂性:
有人说这个算法复杂度是O(n),但我认为它没有考虑第二个循环,它小于O(n^2)但应该大于O(n)。
我们应该如何分析最坏情况的复杂性?
【问题讨论】:
-
这不是有效的 C 代码。
hash.find要求myHash是结构类型;但hash[c]要求myHash是数组或指针类型。你是不是想把它标记为 C++? -
abc 不是唯一的答案,你还有 bca 和 cab。
标签: c algorithm time-complexity