无重复字符的最长子串
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
思路: hash表记录,一旦重复从上一次重复的下一个位置开始重新查找(清空hash中的数据),全局变量保存结果,感觉写的略微复杂了些
struct Node{
bool flag;
int loc;
Node():flag(false){}
};
void clean(Node s[256]){
for(int i = 0; i < 256;++i)
s[i].flag = false;
}
int lengthOfLongestSubstring(string s) {
if (s.empty()) return 0;
int max = 0;
Node mark[256];
clean(mark);
int begin = -1;
for (int i = 0; i < s.size(); ++i){
if (begin == -1){
mark[s[i]].flag = true;
mark[s[i]].loc = i;
begin = i;
}else{
if(mark[s[i]].flag){
int len = i - begin;
if (len > max) max = len;
begin = mark[s[i]].loc + 1;
i = mark[s[i]].loc + 1;
clean(mark);
mark[s[i]].flag = true;
mark[s[i]].loc = i;
}else{
mark[s[i]].flag = true;
mark[s[i]].loc = i;
}
}
}
if (begin != -1 && s.size() - begin > max) max = s.size() - begin;
return max;
}