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

示例 1:

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

输入: "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
示例 3:

输入: "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
     请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-substring-without-repeating-characters
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

package com.illegalaccess.algorithm;import java.util.*;/*** 求一个字符串的无重复字符的最长子串*/
public class SubSetOfString {public static void main(String[] args) {System.out.println(subSetOfString1("bbbbb"));System.out.println(subSetOfString1("abcabcbb"));System.out.println(subSetOfString1("pwwkew"));System.out.println(subSetOfString1(" "));System.out.println(subSetOfString1("aabaab!bb"));}private static int subSetOfString1(String str) {if ("".equals(str) || str == null) {return 0;}char[] chars = str.toCharArray();char[] assist = new char[chars.length];int start = 0, end = 0;int subLength = 0;for (char ch : chars) {if (start == 0 && end == 0) { //第一次赋值assist[start] = ch;end++;continue;}// 非第一个元素assist[end] = ch;for (int j = end - 1; j >= start; j--) {if (assist[j] == ch) {if (subLength < (end - start)) {subLength = (end - start);}start = (j + 1);break;}}end++;}if (subLength < (end - start)) {subLength = (end - start);}return subLength;}private static int subSetOfString(String str) {if ("".equals(str) || str == null) {return 0;}char[] chars = str.toCharArray();Deque<Character> deque = new LinkedList<>();Set<Character> set = new LinkedHashSet<>();int subLength = 0;for (char ch : chars) {boolean add = set.add(ch);if (add) {deque.add(ch);continue;}// 没添加进去,说明遇到了重复字符if (subLength < deque.size()) {subLength = deque.size();}set.clear();while (!deque.isEmpty()) {char c = deque.pollFirst();if (c != ch) {continue;}break;}deque.add(ch);set.addAll(deque);}if (subLength < deque.size()) {subLength = deque.size();}return subLength;}
}

两种方法均可解题。但是subSetOfString1方法执行速度更快。

思路分析:

subSetOfString方法

使用set进行去重,顺序往队列里面放元素,发现有元素没有放进去时,说明遇到了跟之前元素重复的值,此时计算队列或者set的长度都可以,为此时的无重复元素的长度。

然后清空set,从队列头部开始弹出元素,到和当前元素相等的元素为止,然后当前元素入队列,用队列的值填充set。

继续循环。

subSetOfString1方法

这个思路就类似一个窗口,定义一个和入参等长的字符数组,使用双指针,指针直接即为目前的唯一元素

无重复字符的最长子串相关推荐

  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 解释: 因为无重复字符的 ...

  10. 【LeetCode】无重复字符的最长子串【滑动窗口法】

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

最新文章

  1. js从0开始构思表情插件
  2. 异步社区本周半价电子书
  3. 学计算机的学校17w,摇号中签率23.19%,学费一年17W?11所民校详情介绍!
  4. java 基础学习——基本语法(三)
  5. Android本地视频播放器开发--视频解码
  6. ajax 设置Access-Control-Allow-Origin实现跨域访问
  7. python彩票结果分析_即将放弃Python 2.7的不止有Numpy,还有pandas和这些工具
  8. 希望这些建议对你有帮助
  9. Java 8新特性探究(五)重复注解(repeating annotations)
  10. 维护项目的管理策略案例
  11. VB6制作一个简单小程序(税收计算)
  12. moto+早期android手机,七款摩托罗拉早期经典机型回顾
  13. ViewPage的基本使用以及动画效果的添加
  14. 科学研究设计七:单案例设计
  15. c语言ifi=1 2,2017年计算机二级考试C语言最重要的知识点
  16. 【修真院“正直”系列之三】【修真神界】【修行卷】【第一章】修真院入场券...
  17. 解决Chrome浏览器“隐私设置错误,您的链接不是私密连接”
  18. error C2533: “XXX::{ctor}”: 构造函数不能有返回类型
  19. python目前版本强势英雄_王者荣耀S11赛季什么英雄强势 S11强势英雄推荐
  20. java类和对象之包的定义

热门文章

  1. apple tv 开发_如何在Apple TV上使用HomePod
  2. ubuntu22.04更新软件源
  3. 关键词搜索获取商品数据方法
  4. 【sql】在电商情境下提取数据
  5. 解决Mybatis-Plus的联合主键问题
  6. 如何DIY一款属于自己的HID键盘?
  7. java int 降序
  8. javaweb接收数据及接受方式
  9. 小米官网(前一部分)html
  10. 四川高安版华为6110T刷机固件_ca_sccdx免费系统线刷包及教程