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

2023-10-27

LeetCode 第三题

无重复字符的最长子串

难度中等

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

示例 1:

输入: s = “abcabcbb”

输出: 3

解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。

示例 2:

输入: s = “bbbbb”

输出: 1

解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。

示例 3:

输入: s = “pwwkew”

输出: 3

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

示例 4:

输入: s = “”

输出: 0

提示:

0 <= s.length <= 5 * 104
s 由英文字母、数字、符号和空格组成

来源:力扣(LeetCode)

链接:https://leetcode-cn.com/problems/longest-substring-without-repeating-characters

著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

重点:

需要记录两个位置.字串的左边的下标,以及右边的下标

做法:

可以循环,可以用[map,vector]只要可以记录字符位置的基本都可以实现

C++解法

#include <iostream>
#include <vector>

using namespace std;

class Solution {
public:
    static int lengthOfLongestSubstring(string s) {
        //这边随便用什么。map什么的都可以主要要记录字符的下标
        vector<int> m(128, 0); //ASCII码范围:0-127
        int res = 0;
        int left = 0;  //记录下标 从0开始
        for (int right = 0; right < s.size(); right++) {
            char chr = s[right];
            //证明这个字符出现过
            if(m[chr]!=0)  {
                //对比最近这个字符出现的下标,是否在当前的字串当中。
                //滑动窗口的精髓。左边的界限。往右移动一个,把之前出现的这个字符过滤掉。
                left = max(left, m[chr]);
                //为什么不能发现的时候在下标+1呢,
                //答:因为发现的字符可能在窗口之外
            }
            //当前下标+1, 这个+1,是为了下次发现的同样字符的时候把之前那个下标往后移动一个。把这个同样的字符给过滤掉。
            //这点很难理解
            m[chr] = right+1;
            //和以往子串最大长度对比。
            res = max(res, right - left+1);
        }
        return res;
    }
};

int main()
{
    std::string str="aa";
    std::cout<<Solution::lengthOfLongestSubstring(str)<<std::endl;
    return 0;
}

C++ 翻译golang

func max(a, b int) int{
    if a > b {
        return a
    }
    return b
}

func lengthOfLongestSubstring(s string) int {
    //这边的map 也可以用切片
    //m := (make[]int32, 128); 这步没有测试过
    m := make(map[int32]int)
    res:=0
    left:=0
    for index, info := range s {
        chr := info
        if m[chr] != 0 {
            left = max(left, m[chr])
        }
        m[chr] = index+1
        res = max(res, index-left +1)
    }
    return res;
}

可以关注我一起刷题,一起进步。谢谢
在这里插入图片描述

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

LeetCode 3. 无重复字符的最长子串 的相关文章

  • 如何在 Visual Studio 2010 中增强 XAML 设计器?

    当我使用 XAML 设计器时 进入设计器和退出设计器是如此困难和缓慢 当我这样做时 Visual Studio 卡了一段时间 有什么方法可以增强 XAML 设计器和编辑器吗 Ant 保存 XAML 文件时非常慢 这通常意味着您可能有复杂的
  • c和java语言中的换行符

    现在行分隔符取决于系统 但在 C 程序中我使用 n 作为行分隔符 无论我在 Windows 还是 Linux 中运行它都可以正常工作 为什么 在java中 我们必须使用 n 因为它与系统相关 那么为什么我们在c中使用 n 作为新行 而不管我
  • 在 C# 中创建具有单独列的分隔文本

    我一直在尝试在 C 中创建一个制表符限制的文本文件 以便数据正确显示在单独的列中 Firstname Lastname Age John Smith 17 James Sawyer 31 我尝试过 t 字符 但我得到的只是 Firstnam
  • 向 Nhibernate 发出 SQL 查询

    如何将此 SQL 查询发送给 Nhibernate SELECT Customer name FROM Company INNER JOIN Customer ON Company CompanyId Customer CompanyId
  • 如何修复此错误“GDI+ 中发生一般错误”?

    从默认名称打开图像并以默认名称保存 覆盖它 我需要从 Image Default jpg 制作图形 将其放在 picturebox1 image 上并在 picurebox1 上绘制一些图形 它有效 这不是我的问题 但我无法保存 pictu
  • 在 Unity 进程和另一个 C# 进程之间进行本地 IPC 的最快方法 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我希望每秒大约 30 次从 C 应用程序向我的 Unity 应用程序传送大量数据 由于 Unity 不支持映射内存和管道 我考虑了 t
  • 如何从 .resx 文件条目获取注释

    资源文件中的字符串有名称 值和注释 The ResXResourceReader类让我可以访问名称和值 有办法看评论吗 你应该能够得到Comment via ResXDataNode class http msdn microsoft co
  • 如何访问另一个窗体上的ListView控件

    当单击与 ListView 所在表单不同的表单中的按钮时 我试图填充 ListView 我在 Form1 中创建了一个方法以在 Form2 中使用 并将参数传递给 Form1 中的方法 然后填充 ListView 当我调试时 我得到了传递的
  • 存储来自其他程序的事件

    我想将其他应用程序的事件存储在我自己的应用程序中 事件示例 打开 最小化 Word 或打开文件时 这样的事可能吗 运行程序 http msdn microsoft com en us library ms813609 aspx and 打开
  • 在 C# 中循环遍历文件文件夹的最简单方法是什么?

    我尝试编写一个程序 使用包含相关文件路径的配置文件来导航本地文件系统 我的问题是 在 C 中执行文件 I O 这将是从桌面应用程序到服务器并返回 和文件系统导航时使用的最佳实践是什么 我知道如何谷歌 并且找到了几种解决方案 但我想知道各种功
  • C# Dns.GetHostEntry 不返回连接到 WiFi 的移动设备的名称

    我有一个 C 中的 Windows 窗体应用程序 我试图获取列表中所有客户端的主机名 下面给出的是 ra00l 来自此链接的代码示例 GetHostEntry 非常慢 https stackoverflow com questions 99
  • 如何在 Linq 中获得左外连接?

    我的数据库中有两个表 如下所示 顾客 C ID city 1 Dhaka 2 New york 3 London 个人信息 P ID C ID Field value 1 1 First Name Nasir 2 1 Last Name U
  • Rx 中是否有与 Task.ContinueWith 运算符等效的操作?

    Rx 中是否有与 Task ContinueWith 运算符等效的操作 我正在将 Rx 与 Silverlight 一起使用 我正在使用 FromAsyncPattern 方法进行两个 Web 服务调用 并且我想这样做同步地 var o1
  • 使用 Moq 使用内部构造函数模拟类型

    我正在尝试模拟 Microsoft Sync Framework 中的一个类 它只有一个内部构造函数 当我尝试以下操作时 var fullEnumerationContextMock new Mock
  • 用于 C# 的 TripleDES IV?

    所以当我说这样的话 TripleDES tripledes TripleDES Create Rfc2898DeriveBytes pdb new Rfc2898DeriveBytes password plain tripledes Ke
  • 为什么在setsid()之前fork()

    Why fork before setsid 守护进程 基本上 如果我想将一个进程与其控制终端分离并使其成为进程组领导者 我使用setsid 之前没有分叉就这样做是行不通的 Why 首先 setsid 将使您的进程成为进程组的领导者 但它也
  • 如何将 Roslyn 语义模型返回的类型符号名称与 Mono.Cecil 返回的类型符号名称相匹配?

    我有以下代码 var paramDeclType m semanticModel GetTypeInfo paramDecl Type Type Where paramDeclType ToString returns System Col
  • 使用 GhostScript.NET 打印 PDF DPI 打印问题

    我在用GhostScript NET http ghostscriptnet codeplex com打印 PDF 当我以 96DPI 打印时 PDF 打印效果很好 但有点模糊 如果我尝试以 600DPI 打印文档 打印的页面会被极大地放大
  • 检查Windows控制台中是否按下了键[重复]

    这个问题在这里已经有答案了 可能的重复 C 控制台键盘事件 https stackoverflow com questions 2067893 c console keyboard events 我希望 Windows 控制台程序在按下某个
  • 如何正确使用 std::condition_variable?

    我很困惑conditions variables以及如何 安全 使用它们 在我的应用程序中 我有一个创建 gui 线程的类 但是当 gui 是由 gui 线程构造时 主线程需要等待 情况与下面的函数相同 主线程创建互斥体 锁和conditi

随机推荐

  • 快排-java

    快排总结 分区方法 3个while 递归使用排序方法 使用了分治法 挖坑赋值法 package cn com import java util Arrays public class QuickSort public static void
  • 虚拟机上CentOS 7关闭防火墙操作

    虚拟机上CentOS 7关闭防火墙操作 1 首先查看防火墙的状态 使用的命令为 service iptables status 提示 Unit iptables service could not be found 解决方案 还原传统的管理
  • sprintf实例

    include
  • Unity热更新 ILRuntime 从零开始 HelloWorld(二)

    自从我凌晨两点放下喝醉的小姐姐回家写博客之后 小姐姐对我愈发的崇拜了 约我今晚一块学习ILRuntime 带好身份证 我这一想必须要未雨绸缪 安排 选了一个全市最好的网吧 斥巨资通宵5元 请小姐姐一块学习 一起记录下学习内容 这是这一系列文
  • 数字频率计设计

    FPGA教程目录 MATLAB教程目录 设计任务与要求 1 设计任务 设计并实现一个数字频率计 2 基本要求 测频率范围 10Hz 10K Hz 为保证测量精度分为三个频段 10Hz 100 Hz 100Hz 1K Hz 1 K Hz 10
  • lua语言json与table互转,简单方法

    使用方法 1 json转table luaJson json2lua tab 2 table转json luaJson table2json str 这个原理就是是逐个解析字符串 同样可以解析json xml 具体代码如下 这里解析json
  • wayland详解

    简单地说 Wayland是一套display server Wayland compositor 与client间的通信协议 而Weston是Wayland compositor的参考实现 其官网为http wayland freedesk
  • 如何制作网站?如何制作网站教程

    如果公司企业想要知道如何制作网站 那么需要了解一些相关的内容 本文将介绍如何制作网站教程 希望对大家有所帮助 首先我们做好一些准备 域名 建站工具 图文素材 营业执照等资质 步骤一 创建站点 进入建站工具 24 fkw com 后 在工具中
  • 前端Vue自定义精美商品分类组件category 可用于电商应用分类页面

    随着技术的发展 开发的复杂度也越来越高 传统开发方式将一个系统做成了整块应用 经常出现的情况就是一个小小的改动或者一个小功能的增加可能会引起整体逻辑的修改 造成牵一发而动全身 通过组件化开发 可以有效实现单独开发 单独维护 而且他们之间可以
  • 贝叶斯分类

    贝叶斯分类 贝叶斯分类是一类分类算法的总称 这类算法均以贝叶斯定理为基础 故统称为贝叶斯分类 本文作为分类算法的第一篇 将首先介绍分类问题 对分类问题进行一个正式的定义 然后 介绍贝叶斯分类算法的基础 贝叶斯定理 最后 通过实例讨论贝叶斯分
  • [Cmake]源码编译安装Cmake

    源码编译安装Cmake 获取cmake软件包 解压并进入软件包目录 执行配置 编译和安装命令 设置环境变量 执行如下命令验证是否安装成功 获取cmake软件包 wget https cmake org files v3 18 cmake 3
  • PTA 7-3 求整数序列中出现次数最多的数 (10 分)

    本题要求统计一个整型序列中出现次数最多的整数及其出现次数 输入格式 输入在一行中给出序列中整数个数N 0
  • ELF文件头结构

    转自 https blog csdn net tangyuesb article details 54630787 ELF文件头结构定义在 usr include elf h 头文件下 ELF文件有32位版本和64位版本 故其头文件结构也有
  • 进度条教程【github.com/cheggaaa/pb】

    进度条 学习目标 学习内容 前置说明 一个简单的进度条案列 多个进度条的联合使用 进度条在文件Copy IO流的运行 学习总结 学习目标 了解进度条运行原理 掌握github com cheggaaa pb第三方依赖的函数 实践一个进度条
  • 【基础知识】什么是哈希冲突?

    1 什么是哈希表 哈希表 Hash Table 是一种数据结构 它可以快速地在大量数据中查找 插入和删除时数据 哈希表通过使用哈希函数将键 Key 映射到一个位置 然后在该位置存储或查找数据 哈希函数的作用是 将键转换为一个整数 这个整数通
  • linux下服务get请求发生400的问题

    今天遇到个郁闷的问题 平时在windows系统一直跑得好好的服务 在linux下图片请求出问题了 报了个莫名其妙的400问题 虽然我也怀疑问题出在params 22cols 22 22 22id 22 6 22 参数上 但把引号怎么改都改不
  • 【笔记】QString中替换掉指定字符串

    首先使用正则表达式QRegExp匹配指定字符串 然后使用QString的replace方法进行替换 QString originText KobeBryantGigiAitch QString searchText Bryant QStri
  • ubuntu下samba 安装与配置

    为了实现在windows与Linux之间资源共享 Linux操作系统提供了samba服务 samba服务为两种不同的操作系统架起一座桥梁 使Linux系统和windows系统之间可以互相通信 下面简单介绍如何在linux上添加和配置samb
  • 算法---分治策略(快排)

    分治策略之快速排序 快速排序是对冒泡排序算法的一种改进 快速排序在面试过程中被提到的概率还是很大的 本文章我将介绍一下有关快速排序的一些问题 算法思想 1 指定一个定界值 通过该值会将数组分成两部分 2 将大于定界值的数据都放在右边 小于等
  • LeetCode 3. 无重复字符的最长子串

    LeetCode 第三题 无重复字符的最长子串 难度中等 给定一个字符串 s 请你找出其中不含有重复字符的 最长子串 的长度 示例 1 输入 s abcabcbb 输出 3 解释 因为无重复字符的最长子串是 abc 所以其长度为 3 示例