描述

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

示例

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

题解

从左边字符开始向右寻找最长符合要求的字符串,找到之后从左边第二个字符开始再次寻找…当左边开始的字符已经是最后一个字符了我们的遍历就结束了,这很暴力。优化!

维护一个滑动窗口,窗口内(当前窗口l到r)都是没有重复的字符,判断窗口外的下一个字符r+1是否在窗口内出现过,没有出现过去尽可能的扩大窗口的大小,窗口不停的向右滑动r++。

  • 如果当前遍历到的字符从未出现过,那么直接扩大右边界r++;
  • 如果当前遍历到的字符出现过,则缩小窗口(左边索引向右移动)l–,然后继续观察当前遍历到的字符;
  • 重复上述步骤,直到左边索引无法再移动(到达字符串长度);
  • 维护一个最大窗口长度length,每次用出现过的窗口大小来更新最大窗口长度length,最后返回length。
代码
 public static int lengthOfLongestSubstring(String s) {int maxLen = 0;//最大窗口长度int l=0,r=-1  ;//r作为当前遍历字符,初始化-1时便于理解窗口外下一个字符r+1,左边界初始化0int[] hashIndexs=new int[256];Arrays.fill(hashIndexs,0);//建立字符和其出现位置之间的映射,字符从a到z对应的ASCLL码97到122,出现一次则加1,保证窗口内字符只出现过一次,映射值都为0while (l<s.length()){//如果窗口的下一个字符r+1在窗口未出现过,且下一个字符未超出字符串边界if(r+1<s.length()&&hashIndexs[s.charAt(r+1)]==0){r++;hashIndexs[s.charAt(r)]++;//出现次数}else {//窗口左边界右移,移出去的字符出现次数减去一hashIndexs[s.charAt(l)]--;l++;}if(r-l+1>maxLen){maxLen=r-l+1;}}return maxLen;}
另一种解法

创建hash数组,填入的值为该字符在原字符串中的下标
取最近出现的两次下标的最大值
取全局最大值

    public static int lengthOfLongestSubstring(String s) {int curLen=0;int maxLen=0;int[] hashIndexs=new int[256];Arrays.fill(hashIndexs,-1);//填充各字符出现值都为-1for(int curI=0;curI<s.length();curI++){//curI为字符串第几个字符int preI=hashIndexs[s.charAt(curI)];//获取当前下标对应字符在hash表中的值,第一次为-1,后面更新为字符串中字符下标值,取最大的两者差值if(preI==-1||curI-preI>curLen){curLen++;//当前不重复字符串长度}else{maxLen = Math.max(maxLen, curLen);curLen=curI-preI;}hashIndexs[s.charAt(curI)]=curI;}maxLen = Math.max(maxLen, curLen);return maxLen;}

3无重复字符的最长子串longest-substring-without-repeating-characters相关推荐

  1. leetcode算法—无重复字符的最长子串 Longest Substring Without Repeating Characters

    关注微信公众号:CodingTechWork,一起学习进步. 题目 Longest Substring Without Repeating Characters: Given a string, fi ...

  2. 【leetcode】力扣刷题(3):无重复字符的最长子串(go语言)

    一.问题描述 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 " ...

  3. 刻意练习:LeetCode实战 -- Task16. 无重复字符的最长子串

    背景 本篇图文是LSGO软件技术团队组织的 第二期基础算法(Leetcode)刻意练习训练营 的打卡任务.本期训练营采用分类别练习的模式,即选择了五个知识点(数组.链表.字符串.树.贪心算法),每个知 ...

  4. 【每日一算法】无重复字符的最长子串

    微信改版,加星标不迷路! 每日一算法 - 无重复字符的最长子串 思路答案 首先定义一个指针p指向该字符串的链头,然后通过p指针后的第i个字符是否和p指针后的第j个字符相同来取得最大长度.(也叫做完全遍 ...

  5. 汇编语言求无符号数组中出现的次数最多数_【今日最佳leecode通俗易懂】无重复字符的最长子串...

    相信看了这个标题的同学,对这道题以已经非常不陌生了,就是leecode当中的第三题,之所以要单独的写一写主要对我来说,里面涉及到有一个滑动窗口, 散列表, 字符编码等知识点比较重要,也有几个小技巧,这 ...

  6. 大二菜鸟———无重复字符的最长子串

    这是一枚大二菜鸟的成长反思博客   终于忍不住,在这六月将之的一天开始写起了博客.数据结构计算机算法杂七杂八学了一堆但是都只是浅尝,觉得还是要写博客反刍学习到的知识.   感谢大佬 @Java3y 的 ...

  7. 无重复最长子串python_leetCode 无重复字符的最长子串 python(Longest Substring Without Repeating Characters) python...

    给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. Default 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 &quo ...

  8. 算法-------无重复字符的最长子串(Java版)

    题目: 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度.示例 1:输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc& ...

  9. python学习3. 无重复字符的最长子串(滑动窗口)

    makcooo 2019-04-19 15:47:32  271  收藏 分类专栏: python 版权 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: &quo ...

  10. 刷题练习记录(3)——无重复字符的最长子串(JAVA 和 Python)——set()函数/集合...

    [题号003]无重复字符的最长子串 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的 ...

最新文章

  1. 【计算机网络】HTTP 与 HTTPS ( HTTPS 简介 | HTTP 通信过程 )
  2. mysql级联查询_mysql 各种级联查询后更新(update select)
  3. 【广州/深圳 活动】 MVP社区巡讲
  4. if ( document.all ) 可以简单的判断浏览器是否IE浏览器?
  5. DELPHI怎样编写COM组件
  6. iris数据集_sklearn日志(二)训练集和测试集划分
  7. CTime类,CTime 与 CString转换
  8. 大学生html电影网页设计作业成品 我喜欢的电影榜单题材网页制作代码 简单静态网页模板下载
  9. AutoCAD输出矢量图
  10. 谷歌创建新账号时手机号码无法验证
  11. MTK开发入门基础教程
  12. PYTHON 用几何布朗运动模型和蒙特卡罗MONTE CARLO随机过程模拟股票价格可视化分析耐克NKE股价时间序列数据...
  13. The kernel appears to have died. It will restart automatically
  14. 想成为“王者”的必备能力——领导力21法则
  15. springboot微信点餐系统项目设计
  16. 记录一次uni-app按导航栏左边返回,app闪退问题
  17. Spark 读取mysql表统计
  18. 使用C语言链表实现商品管理系统
  19. [行人重识别论文阅读]无监督学习发展与小结
  20. Redis设计与实现学习记录《一》

热门文章

  1. android 锁屏代码分析,锁屏分析(Android9.0)
  2. 每个前端工程师都应该了解的图片知识
  3. 知识图谱导论----相关笔记
  4. 云服务器Docker安装ElasticSearch却启动不了怎么办?
  5. Java+Springboot+Mybatis+Mysql+Bootstrap+Maven实现景区旅游管理系统
  6. 计算机文件只读模式,电脑文件只读模式如何修改 – 手机爱问
  7. 谷歌浏览器任务栏图标变白色解决方法(亲测有效!)
  8. CF1060F Shrinking Tree(期望、树形dp)
  9. 高效文件搜索工具Everything/Listary
  10. 整个网站网页变黑白的效果