给定一个字符串,找出不含有重复字符的最长子串的长度。
示例:
给定 "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;
}
};