• 无重复字符的最长子串[双指针+哈希表] LeetCode.3


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

    示例 1:

    输入: "abcabcbb"
    输出: 3
    解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。

    示例 2:

    输入: "bbbbb"
    输出: 1
    解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。

    示例 3:

    输入: "pwwkew"
    输出: 3
    解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
    请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。

    思路:

    • 双指针 l r 从左到右扫描字符串;
    • hash表中存储双指针范围内的字符;
    • r指针逐步向右扩展,每到达新的一位询问hash表是否存在该字符;
    • 如果不存在则将该字母在hash表中标记;
    • 如果存在则将 l 指针向右移动,更新hash表;
    • 逐步缩减双指针区域,在过程中更新ans;

    代码如下:

    class Solution {
    public:
        int lengthOfLongestSubstring(string s) {
            int l, r, ans = 0;
            unordered_map<int,int>hash;
            for(r = l = 0 ; r < s.size();r++){
                if(hash[s[r]]){
                    for(;l < r && hash[s[r]];l++){
                        hash[s[l]]--;
                    }
                }
                hash[s[r]] ++;
                ans = max(r - l + 1 , ans);
            }
            return ans;
        }
    };
    
  • 相关阅读:
    完全卸载vscode
    php伪静态
    java安装
    Vue中Form表单验证无法消除验证问题
    涂鸦移动一面
    cider 二面
    2022华为机试题目
    解决升级系统导致的 curl: (48) An unknown option was passed in to libcurl
    Centos7修改默认启动级别(命令行,图形切换)
    XGBoost算法原理
  • 原文地址:https://www.cnblogs.com/zhangxiaomao/p/11383260.html
Copyright © 2020-2023  润新知