給定一個字符串,找出不含有重複字符的最長子串的長度。
示例:
給定 "abcabcbb"
,沒有重複字符的最長子串是 "abc"
,那麼長度就是3。
給定 "bbbbb"
,最長的子串就是 "b"
,長度是1。
給定 "pwwkew"
,最長子串是 "wke"
,長度是3。請注意答案必須是一個子串,"pwke"
是 子序列 而不是子串。
循環利用map,映射當前下標,沒找到,push進去,找到了,break計算長度是否大於前面map長度最大值;從遇到重複元素的(map映射)下標n開始不包括n,清空map之後重複進行操作。
class Solution {
public:
int lengthOfLongestSubstring(string s) {
if(s.length()==1||s.length()==0) return s.length();
map<char,int>my_map;
int l_max=0;
int n=s.length();
int i=0;
for(;i<n;i++){
if(!my_map.count(s[i])) {
my_map[s[i]]=i;
if(my_map.size()>=l_max) l_max=my_map.size();
}
else{
i=my_map[s[i]];my_map.clear();
}
}
return l_max;
}
};