題目
給定一個字符串,請你找出其中不含有重複字符的 最長子串 的長度。
示例 1:
輸入: “abcabcbb”
輸出: 3
解釋: 因爲無重複字符的最長子串是 “abc”,所以其長度爲 3。
示例 2:
輸入: “bbbbb”
輸出: 1
解釋: 因爲無重複字符的最長子串是 “b”,所以其長度爲 1。
示例 3:
輸入: “pwwkew”
輸出: 3
解釋: 因爲無重複字符的最長子串是 “wke”,所以其長度爲 3。
請注意,你的答案必須是 子串 的長度,“pwke” 是一個子序列,不是子串。
來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/longest-substring-without-repeating-characters
著作權歸領釦網絡所有。商業轉載請聯繫官方授權,非商業轉載請註明出處。
解題思路
參考管網示例,使用“滑動窗口”解題。博主嘗試着用語言描述“滑動窗口”,發現太晦澀了。因此做了如下動圖演示。
源代碼
以下是實現源碼:
class Solution {
public:
int lengthOfLongestSubstring(string s) {
map<char, int> map_;
int intResult = 0;
int intLength = 0;
int intStart = 0;
for (size_t i = 0; i < s.size(); i++)
{
char temp = s[i];
//map<char, int>::iterator it = map_.find(temp);
while (map_.find(temp) != map_.end())
{
map_.erase(s[intStart]);
intStart++;
}
map_[temp] = i;
intLength = i - intStart + 1;
intResult = max(intLength, intResult);
}
return intResult;
}
};