leetcode刷题--字符串

day8--无重复字符的最长字符串

题目描述

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

示例 1:
输入: s = “abcabcbb”
输出: 3
解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。

解答

可使用“滑动窗口”方法来实现,设置左右两个指针,左指针固定时,右指针移动,直至出现重复元素,然后将左指针向右移动一下,开始下一个子字符串的判断。
为了判断是否有重复元素,普遍使用hashset(哈希表),每当左指针向右移动时,将从哈希表中移除一个元素,右指针向右移动时向哈希表中添加一个元素。
代码如下:`

class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        unordered_set<char> occ;
        int n=s.size();
        int rk=-1,ans=0;
        for(int i=0;i<n;i++){
            if(i>0){
                occ.erase(s[i-1]);
            }
            while(rk+1<n&&!occ.count(s[rk+1])){
                occ.insert(s[rk+1]);
                rk++;
            }
            ans=max(ans,rk-i+1);
        }
        return ans;
    }
};

上一篇:pythonocc_平面、立体、弧面等顶点坐标获取


下一篇:mysql 必知必会整理—子查询与连接表[八]