Week3:Longest Substring Without Repeating Characters
Difficulty:Medium
1.Question
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.
2.Solution
class Solution {
public:
int lengthOfLongestSubstring(string s) {
int ans = 0;
int head = 0;
map<char,int> character;
for(int i = 0; i < s.length();i++) {
map<char,int>::iterator iter = character.find(s[i]);
if(iter != character.end()) {
if(head < iter->second) {
head = iter->second;
}
}
if(ans < i-head+1) {
ans = i-head+1;
}
character[s[i]] = i+1;
}
return ans;
}
};
3.Algorithm
使用滑动窗口解决:
用map(char,int)记录字符串s中每一个不重复字符所在位置的下一个索引,用ans记录最大长度,用head记录上一个重复位置的下一个索引,用i记录遍历的当前位置,这样i-head+1便是从上一个重复位置开始的最大长度。
head遇到重复字符时则要更新为重复字符所在位置的下一个索引