3. Longest Substring Without Repeating Characters
Given a string, find the length of the longest substring without repeating characters.
Examples:
Given "abcabcbb"
, the answer is "abc"
, which the length is 3.
Given "bbbbb"
, the answer is "b"
, with the length of 1.
Given "pwwkew"
, the answer is "wke"
, with the length of 3. Note that the answer must be a substring, "pwke"
is a subsequence and not a substring.
题目链接:https://leetcode.com/problems/longest-substring-without-repeating-characters/description/
题目大意:找到给定字符串中的最大字串,要求字串中字母不重复。
解题思路:纪录初始起点下标 st = 0,遍历字符串,用 map 标记从起始位置 st 到当前位置的字串中每个字母的出现次数,如果访问到重复字母,则纪录字串最大长度并更新起始位置 st 及更新map 标记的值。
代码:
class Solution {
public:
int lengthOfLongestSubstring(string s) {
int len = s.length();
if (len == 0)
return 0;
else if(len == 1)
return 1;
int ans = 1,st = 0;
map <char,int> mp;
mp[s[0]] = 1;
for(int i = 1;i < len;i ++){
if(mp[s[i]]){
ans = max(ans,i - st);
while(mp[s[i]] && st < i){
mp[s[st]] -- ;
st ++ ;
}
mp[s[i]] ++ ;
}else{
mp[s[i]] ++;
}
}
ans = max(ans,len - st);
return ans;
}
};