题目
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
滑动窗口
int lengthOfLongestSubstring(string s) {
map<char, int> hash;
int ans = 0;//返回最大值
int cur = 0;//当前长度
int startindex = 0;//开始索引
for (int i = 0; i < s.size(); i++) {
if (hash.find(s[i])==hash.end()) {
//还没有遇到该字符
hash[s[i]] = i;
cur++;
}
else {
if (cur > ans) {
cur = ans;
}
startindex = max(hash[s[i]], startindex);
//将索引更新为距离i最近的
cur = i - startindex;
hash[s[i]] = i;
}
ans = max(ans, cur);
}
return ans;
}
我刚开始的想法也是滑动窗口,我的想法是维护一个string的变量
但是我没有想到使用**hash[s[i]] = i;**这样的索引来解决 使用索引会方便并且简单很多很多
我刚开始的解法
int lengthOfLongestSubstring(string s) {
map<char, int> hash;
int ans = 0;
string temp = "";
for (int i = 0; i < s.size(); i++) {
if (hash[s[i]] == 0) {
temp += s[i];
hash[s[i]]++;
}
else {
hash.clear();
hash[s[i]]++;
ans = max(ans, temp.size());
temp = s[i];
}
ans = max(ans, temp.size());
}
return ans;
}
上边我的解法是AC不了的,但是有一半的用例可以过 给大家做反面教材
希望我所写的对大家有所帮助