3.无重复字符的最长字串
- 题目描述
给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。
3.无重复字符的最长字串
- 简直不能直视的做法(自己写的- -)
class Solution {
public:
int lengthOfLongestSubstring(string s) {
map<char,int> mp;
int max_len = 0;
int left = 0 , right = 0;//左右指针
for(int i = 0 ; i < s.length(); i++){
map<char,int>::iterator iter;
iter = mp.find(s[i]);
if(iter != mp.end()){//找到重复字符
int length = right - left + 1;
if(length > max_len)
max_len = length;
i = mp[s[i]] + 1;
left = i;
mp.clear();
}
mp[s[i]] = i;
right = i;
}
if(s.length()){
int length = right - left + 1;
if(length > max_len)
max_len = length;
}
return max_len;
}
};
- 学习代码
不需要有重复字符就将map清空,只需要不断右移,直至次数为1
class Solution {
public:
int lengthOfLongestSubstring(string s) {
if(s.length() == 0)
return 0;
map<char,int> mp;
int left = 0 , max_len = 0;
for(int i = 0 ; i < s.length() ; i++){
mp[s[i]]++;
if(mp[s[i]] > 1){//有重复字符
//left右移,直至无重复字符
while(mp[s[i]] > 1){
mp[s[left++]]--;
}
}
max_len = max( max_len , i - left + 1);
}
return max_len;
}
};