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