当前位置: 首页 > news >正文

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.lryc.cn/news/363755.html

相关文章:

  • 了解一下Ubuntu Linux
  • 单一原则+干湿分离,让你的架构能力起飞
  • 如何恢复永久删除的照片?
  • 一文看懂llama2(原理模型训练)
  • Sui基金会公布2024年3–4月资助项目名单
  • Spring Security3.0.1版本
  • 网络报文协议头学习
  • 颜色与纹理
  • pytest-playwright 插件的使用
  • 基于springboot实现智慧校园之家长子系统项目【项目源码】计算机毕业设计
  • 云WAF的安全审计功能
  • 第十七章 创建Web客户端 - 其他调整
  • 学习java的日子 Day52 多表联合查询,DCL,数据类型,约束,索引,视图
  • 计算机视觉(CV)的教程、相关项目
  • mysql in 逗号分隔_数据库字段是逗号分隔的查询(FIND_IN_SET(str,strlist)方法的使用)
  • 【Python】 将日期转换为 datetime 对象在 Python 中
  • dpdk-19.11 arm64 环境适配 Mellanox CX4 网卡
  • 1141. 查询近30天活跃用户数
  • 11_JavaWeb监听器
  • jmeter常用的断言
  • Opencv Python图像处理笔记二:图像变换、卷积、形态学变换
  • 使用若依框架RuoYi前后端分离版+运行+自动生成页面进行导入进行开发+工具(完整版)
  • 开源博客项目Blog .NET Core源码学习(29:App.Hosting项目结构分析-17)
  • 2021 hnust 湖科大 计组课设 包含multisim14连线文件,报告,指导书
  • CHATGPT升级plus(已有账号前提下)
  • 通过血清拉曼光谱进行COVID-19的高效初步筛查
  • Java 性能调优与监控工具详解
  • LeetCode 1633, 122, 239
  • (十五)统计学基础练习题九(选择题T401-450)
  • 用大白话讲解下 CNN和卷积核( 百度 AI 回答 )