//用string的每一个元素开始往后查找直到出现重复字母为止,求出每一个结果返回最大值 时间复杂度O(n2)
int lengthOfLongestSubstring(string s) {
int res = 0;
for(auto i = s.begin(); i != s.end(); ++i) {
set<char> iset;//用set来查找和保存每一个string元素
for(auto j = i; j != s.end(); ++j) {
if(iset.find(*j) == iset.end())
iset.insert(*j);
else
break;
}
res = res < iset.size()? iset.size() : res;
if(res >= s.size() - (i - s.begin()))
break;
}
return res;
}

最优解 用一个ascii长度256大小的数组保存string每个字符的位置,遍历string一次,找到重复的元素时对比O(n)

int lengthOfLongestSubstring(string s) {
vector<int> dict(256, -1);
int maxLen = 0, start = -1;
for (int i = 0; i != s.length(); i++) {
if (dict[s[i]] > start)
start = dict[s[i]];
dict[s[i]] = i;
maxLen = max(maxLen, i - start);
}
return maxLen;
}

 

posted on 2017-10-12 14:38  bloomingFlower  阅读(92)  评论(0编辑  收藏  举报