LeetCode系列4:無重複字符的最長子串

題目

給定一個字符串,請你找出其中不含有重複字符的 最長子串 的長度。

示例 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;
    }
};

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章