LeetCode 3 无重复字符的最长子串

题目链接:LeetCode 3 无重复字符的最长子串

题目大意:
给定一个字符串\(s\),请你找出其中不含有重复字符的最长子串的长度。

题解:
用尺取法解题:

  1. 每次将左指针右移一位表示开始枚举下一个字符作为起始位置;
  2. 不断右移右指针直至出现重复字符,当前子串长度与答案进行比较;
  3. 重复以上操作。

过程中用哈希集合记录出现过的字符。

class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        unordered_set<char> hashTable;
        int n = s.length();
        int r = -1, ans = 0;
        for (int i = 0; i < n; ++i) {
            if (i) {
                hashTable.erase(s[i - 1]);
            }
            while (r + 1 < n && !hashTable.count(s[r + 1])) {
                hashTable.insert(s[r + 1]);
                r++;
            }
            ans = max(ans, r - i + 1);
        }
        return ans;
    }
};
posted @ 2022-02-05 20:43  ZZHHOOUU  阅读(22)  评论(0编辑  收藏  举报