LeekCode3_无重复字符的最长子串(中等)
题目
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
示例 :
输入: 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_无重复字符的最长子串(中等)相关推荐
- 【leetcode】力扣刷题(3):无重复字符的最长子串(go语言)
一.问题描述 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 " ...
- 刻意练习:LeetCode实战 -- Task16. 无重复字符的最长子串
背景 本篇图文是LSGO软件技术团队组织的 第二期基础算法(Leetcode)刻意练习训练营 的打卡任务.本期训练营采用分类别练习的模式,即选择了五个知识点(数组.链表.字符串.树.贪心算法),每个知 ...
- 【每日一算法】无重复字符的最长子串
微信改版,加星标不迷路! 每日一算法 - 无重复字符的最长子串 思路答案 首先定义一个指针p指向该字符串的链头,然后通过p指针后的第i个字符是否和p指针后的第j个字符相同来取得最大长度.(也叫做完全遍 ...
- 汇编语言求无符号数组中出现的次数最多数_【今日最佳leecode通俗易懂】无重复字符的最长子串...
相信看了这个标题的同学,对这道题以已经非常不陌生了,就是leecode当中的第三题,之所以要单独的写一写主要对我来说,里面涉及到有一个滑动窗口, 散列表, 字符编码等知识点比较重要,也有几个小技巧,这 ...
- 大二菜鸟———无重复字符的最长子串
这是一枚大二菜鸟的成长反思博客 终于忍不住,在这六月将之的一天开始写起了博客.数据结构计算机算法杂七杂八学了一堆但是都只是浅尝,觉得还是要写博客反刍学习到的知识. 感谢大佬 @Java3y 的 ...
- 无重复最长子串python_leetCode 无重复字符的最长子串 python(Longest Substring Without Repeating Characters) python...
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. Default 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 &quo ...
- 算法-------无重复字符的最长子串(Java版)
题目: 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度.示例 1:输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc& ...
- python学习3. 无重复字符的最长子串(滑动窗口)
makcooo 2019-04-19 15:47:32 271 收藏 分类专栏: python 版权 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: &quo ...
- 刷题练习记录(3)——无重复字符的最长子串(JAVA 和 Python)——set()函数/集合...
[题号003]无重复字符的最长子串 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的 ...
最新文章
- 一遍记住Java常用的八种排序算法与代码实现
- 数据基本类型以及相关举例
- 计算机入门的一些常用小技巧总结
- 初识html 尝试图片标签 0907
- 相机标定(3) opencv中solvePnPRansac()和solvePnP()计算外参数
- Oracle在rownum使用结果集排序
- boolean类型_10、typescript的高级类型
- NLP预训练家族 | Text-To-Text范式统一NLP任务
- oracle 如何查看一个表属于哪一个数据文件,如何查看某一表空间的数据文件都分布了哪些数据对象...
- 《C专家编程》阅读笔记
- 依赖hutool压缩文件
- 云计算、网格计算和分布式计算区别
- Android 启动页适配问题的完美解决方案
- 自然语言处理NLP基础知识
- CloudNative:云原生(分布式云)的简介(发展演变/为什么需要/优势价值/安全/对比传统企业应用)、四大核心技术、CNCF云原生交互景观、云原生技术的使用经验及方法之详细攻略
- 如何提高数据处理中的准确性
- vim可视模式下复制粘贴文本
- 自定义 VSCode 背景图片
- 网络协议-ARP协议与攻击模拟
- 瓦伦达效应:在大是大非面前不要在乎结果所带来的后果,你就会成功!