LeetCode刷题第3题(C#)

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

法一:

这道题用到的其实是滑动窗口。

滑动窗口算法是在特定窗口大小的数组或字符串上执行要求的操作。它可以将一部分问题中的嵌套循环转变为一个单循环,以此减少时间复杂度。

以字符串为例,滑动窗口的思路为:

1. 使用双指针中的左右指针技巧,初始化left = right = 0,把[left,right]称为一个窗口

2. 先不断扩大右侧的right指针,扩大窗口范围,直到窗口中所有的字符串都符合要求

        比如要在【A,A,D,D,C,B,A,D,C】中找出现ABC的窗口

        在第2步找到【AADDCB】

        此时左侧还没动,所以从第一个A开始

3. 停止增加右侧指针,开始增加左侧left,直到窗口中不包含ABC

        很遗憾,只能移一位,保持窗口在【ADDCB】

4. 重复第2步和第3步,直到right到达给定字符串的最右侧

==》【DDCB】==》【DDCBA】==》【CBA】==》【BA】==》【BADC】==》【ADC】

//样例输入[A,A,C,B,A],找ABC
public int GetAns(string s)
{int left = 0;int right = 0;int max = 0;int i,j;int length = s.Length;bool getSame = false;for(i = 0;i < length;i++){//第一遍,空循环,right右移,变为1//第二遍,查找[A,A],发现有同一字符,左指针右移,右指针也右移,变为[A]//第三遍,查找[A,C],无,right右移//第四遍,查找[A,C,B],无,right右移//第五遍, 查找[A,C,B,A],有,left右移,变为[C,B,A]if(left <= right){getSame = false;for(j = 0; j < right;j++){if(s[j] == s[right]){getSame = true;break;}}if(getSame){left = j+1;}}  max = max < (right - left + 1) ? (right - left + 1): max;right++;      }return max;
}

法二:

看到一个牛逼的大佬,用[255]大小数组构建了哈希表,以此实现必定无重复

并用ASCII码,存储每个字母出现的索引,太绝了

public int LengthOfLongestSubstring(string s) {int indexLeft   = 0;int indexRight  = 0;int len = s.Length;int[] hashMap = new int[255];int max = 0;while (indexRight < len){if (hashMap[s[indexRight]] != 0){if(hashMap[s[indexRight]] > indexLeft)indexLeft = hashMap[s[indexRight]];hashMap[s[indexRight]] = indexRight + 1;}else{hashMap[s[indexRight]] = indexRight + 1;}max = max < (indexRight - indexLeft + 1) ? (indexRight - indexLeft + 1): max;;indexRight++;}return max;}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/22447.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Docker学习】docker push简述

docker push是docker pull的反向操作。我们将镜像上传到公共或私有镜像仓库就需要用到这个命令。 命令&#xff1a; docker image push 描述&#xff1a; 上传一个镜像到注册表。 用法&#xff1a; docker image push [OPTIONS] NAME[:TAG] 别名&#xff1a; docker pu…

实验名称:面向对象练习

门门都精通&#xff0c;头发去无踪。 目录 一、实验目的 二、实验环境 三、实验步骤 四、实验结果 1.设计一个圆类(Cirle)&#xff0c;该类中包含圆心位置、半径、颜色等属性&#xff0c;还包括构造函数和计算圆的周长、面积的方法&#xff0c;设计完成后&#xff0c;测试…

算法004:盛水最多的容器

这道题比较简单&#xff0c;使用双指针。 要求的是最大面积&#xff0c;对于一个水桶&#xff08;水杯来说&#xff09;&#xff0c;面积的算法是固定的&#xff0c;就是底乘以高。 在这个题中&#xff0c;我们把左边的位置设为left&#xff0c;右边的位置设为right&#xff…

一个月飙升 9k star!打破常规的 git 客户端

作为一名程序员&#xff0c;想必大家每天都要使用 git 来管理自己的代码吧。有些大佬喜欢使用命令行来进行 git 的操作&#xff0c;有些新入门的小白程序员则比较喜欢使用各种 git 客户端来可视化的管理代码&#xff0c;而有些程序员则喜欢使用 IDE 中集成的 git 功能来做代码的…

XXE漏洞介绍

XXE&#xff08;XML External Entity&#xff09;漏洞是一种安全漏洞&#xff0c;它发生在应用程序解析XML输入时。如果应用程序没有正确地限制对外部实体的引用&#xff0c;攻击者可以利用XXE漏洞执行各种恶意操作&#xff0c;例如访问敏感文件、执行远程服务请求、甚至可能导…

1、企业会计准则--基本准则

根据《国务院关于〈企业财务通则〉、〈企业会计准则〉的批复》(国函[1992]178号)的规定,财政部对《企业会计准则》(财政部令第5号)进行了修订,修订后的《企业会计准则--基本准则》已经部务会议讨论通过,现予公布,自2007年1月1日起施行。 二○○六年二月十五日 企业会计…

云计算导论(3)---分布式文件系统

文章目录 1. 概述2. 基本架构3. GFS和HDFS4. 云存储 1. 概述 1. 文件系统是操作系统用来组织磁盘文件的方法和数据结构。  传统的文件系统指各种UNIX平台的文件系统&#xff0c;包括UFS等&#xff0c;它们管理本地的磁盘存储资源&#xff0c;提供文件到存储位置的映射&#xf…

鸿蒙开发接口定制管理:【@ohos.enterpriseDeviceManager (企业设备管理)】

企业设备管理 说明&#xff1a; 本模块首批接口从API version 9开始支持。后续版本的新增接口&#xff0c;采用上角标单独标记接口的起始版本。 导入模块 import enterpriseDeviceManager from ohos.enterpriseDeviceManager;enterpriseDeviceManager.activateAdmin activate…

力扣234. 回文链表

给你一个单链表的头节点 head &#xff0c;请你判断该链表是否为回文链表。如果是&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 示例 1&#xff1a; 输入&#xff1a;head [1,2,2,1] 输出&#xff1a;true # Definition for singly-linked list. # c…

R语言探索与分析17-CPI的分析和研究

一、选题背景 CPI&#xff08;居民消费价格指数&#xff09;作为一个重要的宏观经济指标&#xff0c;扮演着评估通货膨胀和居民生活水平的关键角色。在湖北省这个经济活跃的地区&#xff0c;CPI的波动对于居民生活、企业经营以及政府宏观经济政策制定都具有重要的影响。因此&a…

打造卓越任务调度体系:实用攻略与技巧解析

写这篇文章&#xff0c;想和大家从头到脚说说任务调度&#xff0c;希望大家读完之后&#xff0c;能够理解实现一个任务调度系统的核心逻辑。 1 Quartz Quartz 是一款 Java 开源任务调度框架&#xff0c;也是很多 Java 工程师接触任务调度的起点。 下图显示了任务调度的整体流…

基于STC12C5A60S2系列1T 8051单片机实现一主单片机与一从单片机相互发送数据的RS485通信功能

基于STC12C5A60S2系列1T 8051单片机实现一主单片机与一从单片机相互发送数据的RS485通信功能的RS485通信功能 STC12C5A60S2系列1T 8051单片机管脚图STC12C5A60S2系列1T 8051单片机串口通信介绍STC12C5A60S2系列1T 8051单片机串口通信的结构基于STC12C5A60S2系列1T 8051单片机串…

QTreeWidget双击节点响应

1、双击子节点&#xff0c;槽函数响应。传回两个参数&#xff0c;一个是双击的子节点&#xff0c;一个是列序号。 connect(ui.treeWidget, SIGNAL(itemDoubleClicked(QTreeWidgetItem *, int)), this, SLOT(ShowImage(QTreeWidgetItem *,int)));2、下列是槽函数的代码。 void…

zdppy_api 中间件请求原理详解

单个中间件的逻辑 整体执行流程&#xff1a; 1、客户端发起请求2、中间件拦截请求&#xff0c;在请求开始之前执行业务逻辑3、API服务接收到中间件处理之后的请求&#xff0c;和数据库交互&#xff0c;请求数据4、数据库返回数据5、API处理数据库的数据&#xff0c;然后给客户…

【第十一课】空间数据基础与处理——属性数据管理

一、前言 Arcgis分析离不开两大主体数据&#xff0c;一是空间&#xff0c;二是经济属性。在运用 Aecgis 进行分析时&#xff0c;经常会碰到一些涉及多要素的属性更改或填写&#xff0c; 如果按照普通的方法&#xff0c;每个属性进行修改或填写的话&#xff0c;工作量是很大的&…

Apache OFBiz 路径遍历导致RCE漏洞复现(CVE-2024-36104)

0x01 产品简介 Apache OFBiz是一个电子商务平台,用于构建大中型企业级、跨平台、跨数据库、跨应用服务器的多层、分布式电子商务类应用系统。是美国阿帕奇(Apache)基金会的一套企业资源计划(ERP)系统。该系统提供了一整套基于Java的Web应用程序组件和工具。 0x02 漏洞概…

【深入理解计算机系统第3版】补码加法

感觉这部分有点难&#xff0c;所以稍微整理记一下。 抱歉中英混合&#xff0c;来回切换输入法真的很折磨人。 负溢出 正常 正溢出 以4位补码加法为例&#xff0c;理解下表(书中P64) 补码最大值Tmax 2^3 - 1 7, 补码最小值Tmin -2^3 -8 xyz x yz z mod 2^4zU2Tw(z)溢…

超燃混剪热门视频素材去哪里找? 爆款超燃网站合集分享

在今天的数字时代&#xff0c;短视频已成为传播信息和个人表达的主流方式。无论你是混剪爱好者还是自媒体创作者&#xff0c;掌握如何获取和利用高质量的视频素材是关键。本文将介绍几个顶级的视频素材网站&#xff0c;包括国内外的平台&#xff0c;帮助你创建引人入胜的视频作…

Elasticsearch--easy-ES框架使用,轻松操作查询Elasticsearch,简化开发

Easy-Es&#xff08;简称EE&#xff09;是一款基于ElasticSearch(简称Es)官方提供的RestHighLevelClient打造的ORM开发框架&#xff0c;在 RestHighLevelClient 的基础上,只做增强不做改变&#xff0c;为简化开发、提高效率而生,您如果有用过Mybatis-Plus(简称MP),那么您基本可…

【数据结构】二叉搜索树--BST,Binary Search Tree

文章目录 二叉搜索树1. 二叉搜索树的概念2. 二叉搜索树的接口2.1 查找非递归查找递归查找 2.2 中序遍历2.3 插入非递归插入递归插入 2.4 删除非递归删除递归删除 3. 二叉搜索树的应用key搜索模型kv搜索模型 5. oj题 二叉搜索树 1. 二叉搜索树的概念 二叉搜索树又称二叉排序树…