力扣3:無重復字符的最長子串
- 題目
- 思路
- 代碼
題目
給定一個字符串 s ,請你找出其中不含有重復字符的 最長 子串 的長度。
思路
這道題的思路其實是很簡單的,最后我們需要得到子串的長度所以我們可以定義兩個變量即子串的左邊界和右邊界這樣有了左右邊界就等于有了子串。然后我們從子串的起始位置開始移動右邊界,每次移動前都要判斷當前子串中是否有重復的字符如果有我們必須移動左邊界直到移動到這個重復的字符后。
思路就是這樣個思路,那么問題主要就是如何進行判斷子串里是否有重復字符。其實也很簡單我們使用哈希表即可。
代碼
class Solution {
public:int lengthOfLongestSubstring(string s) {int n = s.size();if (n <= 1) {return n;}int res = 0;// 子串的左邊界int left = 0;// 子串的有邊界int right = 0;// 使用哈希表來檢查是否有重復的字符unordered_set<char> us;for (right = 0; right < n; right++) {char ch = s[right];// 如果在哈希表里有了這個字符while (left <= right && us.count(ch)) {// 就從哈希表中刪除左邊界的字符// 并且++左邊界直到哈希表中不存在ch字符us.erase(s[left]);left++;}us.insert(ch);res = max(res, right - left + 1);}return res;}
};