【LeetCode】无重复字符的最长子串

2023-05-16

尝试1

思路清晰但是耗时

class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        int n = s.size();
        int num = 0;
        for(int i = 0; i < n; i++){
            set<char> m;
            m.insert(s[i]);
            int j;
            for(j = i+1; j < n; j++)
            {
                if(m.count(s[j]))
                {
                    break;
                }
                m.insert(s[j]);
            }
            num = max(num, j - i);
        }
        return num;
    }
};

在这里插入图片描述

尝试2

可以不用回退j,但是没用全通过,利用VS debug后发现在i==j时有bug,加入 if(j == i) j = i+1;解决

class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        int n = s.size();
        int num = 0;
        int j = 1;
        set<char> m;
        for(int i = 0; i < n; i++){
            m.insert(s[i]);
            if(j == i) j = i+1;
            for(j; j < n; j++)
            {
                if(m.count(s[j]))
                {
                    m.erase(s[i]);
                    break;
                }
                m.insert(s[j]);
            }
            num = max(num, j - i);
        }
        return num;
    }
};

在这里插入图片描述

官方题解

左指针向右移动的时候,我们从哈希集合中移除一个字符,在右指针向右移动的时候,我们往哈希集合中添加一个字符。

class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        // 哈希集合,记录每个字符是否出现过
        unordered_set<char> occ;
        int n = s.size();
        // 右指针,初始值为 -1,相当于我们在字符串的左边界的左侧,还没有开始移动
        int rk = -1, ans = 0;
        // 枚举左指针的位置,初始值隐性地表示为 -1
        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;
            }
            // 第 i 到 rk 个字符是一个极长的无重复字符子串
            ans = max(ans, rk - i + 1);
        }
        return ans;
    }
};

作者:LeetCode-Solution
链接:https://leetcode.cn/problems/longest-substring-without-repeating-characters/solution/wu-zhong-fu-zi-fu-de-zui-chang-zi-chuan-by-leetc-2/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【LeetCode】无重复字符的最长子串 的相关文章

  • pytorch: 四种方法解决RuntimeError: CUDA out of memory. Tried to allocate ... MiB

    Bug xff1a RuntimeError CUDA out of memory Tried to allocate MiB 解决方法 xff1a 法一 xff1a 调小batch size xff0c 设到4基本上能解决问题 xff0c
  • Linux打开txt文件乱码的解决方法

    今天发现打开windows下的txt文本出现问题 xff0c 主要是编码问题 xff0c 所以这里我记录下这个问题的解决方法 Linux显示在 Windows 编辑过的中文就会显示乱码是由于两个操作系统使用的编码不同所致 Linux下使用的
  • ubuntu14.04安装cuda

    首先验证你是否有nvidia的显卡 xff08 http developer nvidia com cuda gpus这个网站查看你是否有支持gpu的显卡 xff09 xff1a lspci grep i nvidia 查看你的linux发
  • debian安装无线网卡驱动

    最近安装了debian8 xff0c 但是安装好了后发现不能连wifi 能连有线的 xff0c 笔记本不能连WIFI是个悲剧 xff0c 于是就度百度 xff0c 最后在一篇文章看到方法 xff0c 原文地址 xff1a https wik

随机推荐

  • 魔改Cmake系列:cmake中Boost找不到库的解决方法

    Begin finding boost libraries FindBoost cmake文件中 xff0c 在CMake share cmake 3 4 Modules 找到下面这几行代码 xff08 你可以搜索 xff09 messag
  • 关于softmax损失函数的推导

    关于softmax损失函数的推导 某人问我softamx损失函数的推导 索性就写一下 定义softmax损失函数的输入为 X N C 和 Y N C 其中N代表输入的数据的个数 C代表类别的个数 X指的是神经网络的输出 Y代表的是0 1矩阵
  • 手把手教你数据恢复编程(二)基础知识篇

    好了 接上一篇 xff0c 本篇 xff0c 我们将详细讲解NTFS文件系统的一些重要的数据结构 xff0c 闲话少叙 xff0c 咱们开讲 NTFS文件系统 一 NTFS简介 NTFS xff08 New Technology File
  • 数字图像基本处理算法

    数字图像基本处理算法 xizero00 常熟理工学院 xff08 CIT xff09 计算机科学与工程学院 下一代互联网实验室 NGIL Lab Email xizero00 64 163 com 由于SIFT算法需要用到很多算法 xff0
  • PyOpenPose编译与使用

    PyOpenPose编译 前言 PyOpenPose是一个OpenPose的python绑定 xff0c 你可以使用python来实现人体的姿态估计 用上python的openpose xff0c 想想就有点小激动呢 哈哈 PyOpenPo
  • torch系列:如何在torch内使用tensorboard

    torch也是可以使用tensorboard的 xff0c 通过安装crayon就可以 下面以ubuntu下的安装为例进行讲解 其实安装的过程还是会碰到不少曲折的过程的 主要为 安装crayon会提示找不到libssl so文件 xff0c
  • mask rcnn使用指南

    做姿态估计的小伙伴们肯定经常用检测器 xff0c 为了方便大家 xff0c 这里给出一个很方便的教程 让大家快速上手 xff0c 不用再纠结配置环境 xff01 欢迎加入我们的姿态估计群 xff1a 970029323 xff08 xff1
  • UML中的泛化、实现、依赖、关联、聚合、组合6种关系

    在UML中经常见到几种关系 xff1a 泛化 xff08 Generalization xff09 实现 xff08 Realization xff09 依赖 xff08 Dependency xff09 关联 xff08 Associat
  • RTOS系统与Linux系统的区别

    RTOS是实时操作系统 Linux是时分系统 xff0c 不过可以通过配置内核改成实时系统 实时操作系统 英文称Real Time Operating System xff0c 简称RTOS 1 实时操作系统定义 实时操作系统 xff08
  • 【Pytorch】学习笔记2023/2/28

    参考文献 Pytorch学习笔记 张贤同学 深度学习百科及面试资源 飞桨
  • k8s-kubernetes--网络策略、flannel网络插件和calico网络插件

    文章目录 一 k8s网络通信1 网络策略2 service和iptables的关系 二 pod间通信1 同节点之间的通信2 不同节点的pod之间的通信需要网络插件支持 详解 1 Flannel vxlan模式跨主机通信原理 2 vxlan模
  • 【Python】可视化figure

    1 Tensorboard静态显示 span class token keyword import span torch span class token keyword import span torch span class token
  • 【Python】绘制双Y轴折线与散点图

    span class token keyword import span matplotlib span class token punctuation span pyplot span class token keyword as spa
  • 【World】插入公式

    1创建样式 公式 2调整段落格式 行间距最小值 xff1a 防止公式显示不全 3根据纸张制作制表符 公式20字符左右 xff0c 居中对齐 标号40字符左右 xff0c 右对齐 确定 4在需要公式的一行 xff0c 点击创建的样式 xff0
  • 【Python】matplotlib替代cv画虚线矩形框

    span class token keyword import span cv2 span class token keyword as span cv span class token keyword import span matplo
  • 【造轮子】最小权完备匹配算法

    1 C 43 43 编程方法 矩阵方法 span class token macro property span class token directive hash span span class token directive keyw
  • 【LeetCode】两数之和

    1 两数之和 1 My solution span class token keyword class span span class token class name Solution span span class token punc
  • 【LeetCode】两数相加

    1 主要是链表先创建下一个对象 xff0c 再转移 xff0c 而不是先转移到空指针再赋值 t span class token operator 61 span span class token keyword new span span
  • 【算法】kalman运动状态估计不准确的思考

    前言 在仿真实验多目标跟踪时 xff0c 我采用了Kalman做跟踪 xff0c 在运动状态估计时位置可以很 准确 的估计 xff0c 但是速度与方向就偏差很大 xff0c 最近看到了一篇文献详细的介绍了原因 xff0c 之前考虑到时间间隔
  • 【LeetCode】无重复字符的最长子串

    尝试1 思路清晰但是耗时 span class token keyword class span span class token class name Solution span span class token punctuation