题目

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

示例 :

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

解题

滑动窗口方式:
将每个不重复的最长字符串当做一个窗口,一直在整个字符串中滑动
它的左右两个边界分别为:i和rk
rk会一直向右走,如果list中没有rk+1位置的字符,就将这个位置字符放入进去,如果存在的话,将i位置的字符在list中删除,然后i+1继续重复以上操作。

这里其实用HashSet效率更高一些,但是我为了方便打印输出它的过程就用ArrayList了。


// 3.无重复字符的最长子串
public class leekcode3 {public int lengthOfLongestSubstring(String s) {// 有序list集合,记录滑动的窗口ArrayList<Character> occ = new ArrayList<Character>();int n = s.length();//rk是指针,ans存放最大不同字符个数int rk =0, ans = 0;for (int i = 0; i < n; ++i) {if (i != 0) {// 左指针向右移动一格,移除一个字符occ.remove(0);      //list是有序的所以,只需要每次删除list的第一位即可}else occ.add(s.charAt(0));     //将第一个先存进去,因为以下存的都是当指针的下一个//charAt()指定位置的字符,contanins()是否包含这个字符while (rk+1  < n && !occ.contains(s.charAt(rk+1))) {// 不断地移动右指针occ.add(s.charAt(rk+1));System.out.println("滑动窗口:"+occ.toString());rk++;}// rk - i + 1:当前的第i到rk个字符是一个极长的无重复字符子串// ans:前一个的最大字符串长度ans = Math.max(ans, rk - i + 1);    //取出这两个中最大的}return ans;}
}

测试

    public static void main(String[] args) {leekcode3 leek= new leekcode3();int abcabcbb = leek.lengthOfLongestSubstring("abcabcbb");System.out.println(abcabcbb);}

结果

滑动窗口:[a, b]
滑动窗口:[a, b, c]
滑动窗口:[b, c, a]
滑动窗口:[c, a, b]
滑动窗口:[a, b, c]
滑动窗口:[c, b]
滑动窗口:[b]
3

LeekCode3_无重复字符的最长子串(中等)相关推荐

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

最新文章

  1. 一遍记住Java常用的八种排序算法与代码实现
  2. 数据基本类型以及相关举例
  3. 计算机入门的一些常用小技巧总结
  4. 初识html 尝试图片标签 0907
  5. 相机标定(3) opencv中solvePnPRansac()和solvePnP()计算外参数
  6. Oracle在rownum使用结果集排序
  7. boolean类型_10、typescript的高级类型
  8. NLP预训练家族 | Text-To-Text范式统一NLP任务
  9. oracle 如何查看一个表属于哪一个数据文件,如何查看某一表空间的数据文件都分布了哪些数据对象...
  10. 《C专家编程》阅读笔记
  11. 依赖hutool压缩文件
  12. 云计算、网格计算和分布式计算区别
  13. Android 启动页适配问题的完美解决方案
  14. 自然语言处理NLP基础知识
  15. CloudNative:云原生(分布式云)的简介(发展演变/为什么需要/优势价值/安全/对比传统企业应用)、四大核心技术、CNCF云原生交互景观、云原生技术的使用经验及方法之详细攻略
  16. 如何提高数据处理中的准确性
  17. vim可视模式下复制粘贴文本
  18. 自定义 VSCode 背景图片
  19. 网络协议-ARP协议与攻击模拟
  20. 瓦伦达效应:在大是大非面前不要在乎结果所带来的后果,你就会成功!

热门文章

  1. ESPIDF开发ESP32学习笔记【WiFi实现】
  2. 珍惜在天堂和地狱溜达的每一天
  3. 感悟信息安全之道——温水煮青蛙
  4. Mockito verify
  5. 南开大学计算机2019分数线,2019年南开大学录取分数线(预估)
  6. 如何查看网页中的密码星号内容
  7. 微信小程序——tabBar使用
  8. 用JS做10以内的加法(带按钮)
  9. GBase 8s灾备集群HAC (四) 异地灾备RSS
  10. VII html+css