leetcode-无重复元素的最长子串

2023-11-19

给定一个字符串,请你找出其中不含有重复字符的最长子串的长度
例如对于字符串:str=“adfhdsla”,它的无重复字符的最长子串为:sub=“adfhdsl”
很显然,首先要有一个函数用以判断当前的子串中有无重复元素,然后寻找子串的工作就要用这个题的核心概念:滑动窗口
首先定义两个指针head, tail其中head=0, tail=1构成初始化窗口

  1. 如果arr[head]-arr[tail-1]指定的子串不含重复元素,则可以将窗口扩大即tail++
  2. 如果arr[head]-arr[tail-1]指定的子串含有重复元素,则此时的窗口两端的两个元素重复,则需要将head的一侧的字符去掉即head++
    如此循环往复,就能穷举所有的含有不重复字符的子串,之后,设置一个标志位,记录子串长度,标记最长子串即可
public class MostLongSubString {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		String str = "abcabcbb";
		System.out.println(lengthOfLongestSubstring(str));
	}
	
	public static int lengthOfLongestSubstring(String s) {
		int start = 0;
		int end = 1;
		int maxSize = 1;
		char[] chs = s.toCharArray();
		while(end<chs.length) {
			if(checkChar(chs, start, end)) {
				//如果字符不重复,扩张窗口
				int nowSize = end - start;
				if(nowSize > maxSize) {
					maxSize = nowSize;
				}
				end++;
			}else {
				//存在字符重复
				start++;
			}
			//System.out.println(start+"--"+end);
		}
		return maxSize;
    }
	
	public static boolean checkChar(char[] arr, int s, int e) {
		int a[] = new int[128];
		for(int i = s; i < e; i++) {
			int index = arr[i];
			a[index] = a[index] + 1;
			if(a[index] > 1) {
				//字符重复
				return false;
			}
		}
		return true;
	}

}

主要的用途在于,寻找一个符合某种规则的子串,比如最长上升子串这样

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

leetcode-无重复元素的最长子串 的相关文章

随机推荐

  • websocket协议

    WebSocket是一种在Web应用程序中实现实时双向通信的协议 一种在单个TCP连接上进行全双工通信的协议 它使得客户端和服务器之间的数据交换变得更加简单 允许服务端主动向客户端推送数据 WebSocket 与 HTTP 2 一样 其实都
  • C++-必知必会_类模板成员特化(条款48)

    类模板成员特化 再提醒一下 虽然模板的特化和类的派生之间没有任何关 系 但在特化模板的时候 不妨借鉴一下派生的精神 也就意味 着一个完全特化或局部特化通常必须重新实现 主模板具备的 所有能力 例1 主模板 template lt typen
  • Mariadb数据库之主从复制同步配置实战

    Mariadb数据库之主从复制同步配置实战 一 环境规划 二 Mariadb的主从复制介绍 1 主从复制简介 2 半同步复制介绍 3 主从复制原理图 三 安装Mariadb 1 配置yum仓库 2 检查yum仓库 3 安装mariadb 4
  • 八、RISC-V SoC外设——GPIO接口 代码讲解

    前几篇博文中注释了RISC V的内核CPU部分 从这篇开始来介绍RISC V SoC的外设部分 另外 在最后一个章节中会上传额外添加详细注释的工程代码 完全开源 如有需要可自行下载 目录 0 RISC V SoC注解系列文章目录 1 结构
  • vue之input通过formData实现单个文件上传

  • 数学建模--Seaborn库绘图基础的Python实现

    目录 1 绘图数据导入 2 sns scatterplot绘制散点图 3 sns barplot绘制条形图 4 sns lineplot绘制线性图 5 sns heatmap绘制热力图 6 sns distplot绘制直方图 7 sns p
  • More Info for Email AdminsStatus code 554 5.4.14

    Your message to account security noreply accountprotection microsoft com couldn t be delivered account security noreply
  • System.getProperty用法

    转自 http blog darkmi com 2011 03 16 1666 html System getProperty 用于获取当前的系统属性 比如java版本 操作系统名称 区域 用户名等 这些属性一般由jvm自动获取 不能手工设
  • IQ调制的过程

    正交调制 IQ modulation IQ调制器的相移器原理 正交调制数学表达和图形化过程i显示 关键元素都在里面 普通调制的过程 PAM调制的原理 IQ modulators are versatile building blocks f
  • 如何将Visio绘制的图保存为300dpi的tif图片

    采用visio 2013绘图 用ctrl A全选绘制的图 开始 另存为 选择保存类型为tif Tif输出设置 分辨率设为300dpi 300dpi 验证一下图片分辨率 右击生成的tif文件 属性 详细信息
  • 问题记录:js的=>和function

    这个问题搞了一整天 是这么一个功能
  • 认识 maven_我的总结

    认识 maven maven Apache Maven 是一种用于软件项目管理工具 基于 Project Object Model POM 用来管理项目的构建 汇报及文档生成等功能 软件开发 开发 gt 测试 gt 安装与部署 开发阶段 依
  • Apache Flink Checkpoint 应用实践

    Checkpoint 与 state 的关系 Checkpoint 是从 source 触发到下游所有节点完成的一次全局操作 下图可以有一个对 Checkpoint 的直观感受 红框里面可以看到一共触发了 569K 次 Checkpoint
  • STM32_USB之完全双缓存(包括发送和接收) -- 更新中断处理

    STM32的USB双缓存接收代码其实已经可以在ST提供的USB示例代码中找到 只要稍加修改 就可以得到将近1MB的数据接收性能 虽然Datasheet中说明USB发送也同样可以使用双缓存 但并没有示例代码 由于为了测试性能 自己做了一个 测
  • R语言GGPLOT2绘制圆环图雷达图/星形图/极坐标图/径向图Polar Chart可视化分析汽车性能数据

    最近我们被客户要求撰写关于可视化的研究报告 包括一些图形和统计输出 漂亮的圆形图 我不确定对数据分析师本身是否有额外的好处 但如果能吸引决策者的注意 那对我来说就是额外的价值 然而 用coord polar 或偶尔发现的ggplot2中的c
  • Lua的线程和状态 及协程

    luaL loadstring L return coroutine create function end nCallResult lua pcall L 0 1 0 创建一个协程和lua newthread创建一个线程一样 不过这个创建
  • 关于mysql group_concat不得不说的事

    mysql中 group concat函数将group by产生的同一个分组中的值连接起来 返回一个字符串结果 当查询的数据过多时 group concat超出了默认值1024个字符 超过就会截断 导致group concat查询出来的数据
  • ppt怎么压缩文件大小?学会这几种方法

    ppt 用office PowerPoint 制作的幻灯片 用于编辑 播放 各种操作 简单易学 在实际的生活和办公过程中 ppt文件的应用范围非常广泛 同样的 ppt也是非常重要的工具之一 很多时候 我们需要对ppt文件进行压缩 从而满足p
  • 原理图中的电阻旁边有个”NC“,什么意思?

    NC表示此处空贴 即此处不贴任何电子器件 如果安装的话 电路会有另外的功能 或许在性能上会有变化 常用于电路板贴装技术中 电路板贴装是回流焊中的一种工艺流程 回流焊也叫再流焊 是伴随微型化电子产品的出现而发展起来的焊接技术 主要应用于各类表
  • leetcode-无重复元素的最长子串

    给定一个字符串 请你找出其中不含有重复字符的最长子串的长度 例如对于字符串 str adfhdsla 它的无重复字符的最长子串为 sub adfhdsl 很显然 首先要有一个函数用以判断当前的子串中有无重复元素 然后寻找子串的工作就要用这个