LeetCode #3 无重复字符的最长子串
题目描述
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
示例 :
输入: "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。
题目分析
左右两个指针,做滑动窗口,通过判断右指针的元素是否出现过,来决定左指针是否跳跃。同时,不断更新最长字串长度。
自己先写了一种方法,后来又看了思路相同,代码实现不同的更好的写法,发现思维量和代码量是负相关的- - !真是看前一脸懵逼,看完恍然大悟。
class Solution {
public:
int lengthOfLongestSubstring(string s) {
int start=0;
int end=0;
int maxlen=0;
int len=0;
map<char,int> hash;//字母->最近一次出现的位置
while(end<s.size()){
char c = s[end];
//当且仅当s[start,end)中存在s[end]时,更新start
if(hash.find(c)!=hash.end()&&hash[c]>=start){
start = hash[c]+1;
len = end - start;
}
hash[c]=end;
end++;
len++;
maxlen = maxlen>len?maxlen:len;
}
return maxlen;
}
};