无重复字符的最长子串

> “偶遇变态力扣周赛,拼尽全力无法战胜,力竭而亡,无奈去刷基础题,遂写下此题解”

戳我看原题

题目大意

给定一个字符串s,请你找出其中不含有重复字符的最长子串的长度。

思路

滑动窗口(不知道为啥最近和滑动窗口这么有缘),遍历右边界,每次移动更新左边界,确保窗口内不会出现重复元素。

如何更新左边界

开一个数组用于记录当前右边界字符出现的下标i,若下次遇到相同的字符则通过该数组直接将左节点更新至i+1;

如何记录字符所在的下标

方法一:利用ASCII表,开一个长度为128的数组;
方法二:利用unordered_map关联容器
【C++】unordered_map 容器的最全解析(什么是unordered_map?unordered_map的常用接口有那些?)

代码

点击查看代码
class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        vector<int>m(128,0); // unordered_map<char,int> m;
        int ans = 0;
        int i = 0,n=s.size();
        for (int j = 0; j < n; j++) {
            i = max(i, m[s[j]]);
            m[s[j]] = j + 1;
            ans = max(ans, j - i + 1);
        }
        return ans;
    }
};

感想

这不比摘樱桃的题解好写多了。kyiku的歌怎么这么好听

posted @ 2025-01-20 20:00  Xhita  阅读(20)  评论(0)    收藏  举报