解法一:就是遍历所有符合要求的子串,并且,找出最长子串,时间复杂度为O(n^2),很明显,超时。以下是源码:
int lengthOfLongestSubstring(string s) {
int result=0;
set<char> charSet;
int length = s.size();
for(int i=0; i<length; ++i){
int j=i;
while(charSet.find(s[j])==charSet.end()&&j<length){
charSet.insert(s[j]);
++j;
}
if((int)charSet.size()>result)
result = charSet.size();
charSet.clear();
}
return result;
}
解法二:参考网上的做法, 遍历字符串,如果当前字符出现过,子串的开始位置+1,否则更新locs数组中的hash值为当前位置。参考自:http://www.cnblogs.com/dollarzhaole/p/3155712.html,里面有源码,我也列到下面,其实还有点想不通,先记录在这里。
int lengthOfLongestSubstring(string s) {
int location[256];
memset(location, -1, sizeof(location));
int index = -1, max=0;
for(int i=0; i<s.size(); ++i){
if(location[s[i]]>index){
index = location[s[i]];
}
if(i-index > max)
max = i-index;
location[s[i]] = i;
}
return max;
}