问题简介:求给定字符串中最长的字符不重复的字符串的长度

问题详解:

给定一个字符串,寻找给定字符串中包含的最长的字符不重复的字符串的长度

注:答案必须是子字符串,不是子序列

是连续的字符不重复的字符串,不是所有不重复字符

举例:

1.

输入: “abcabcbb”

输出: 3

解释: 结果是 “abc”, 长度是 3

2.

输入: “bbbbb”

输出: 1

解释: 结果是 “b”,长度是 1

3.

输入: “pwwkew”

输出: 3

解释: 结果是 “wke”,长度是 3

JAVA 实现方法一:笨方法遍历(第一次愚蠢实现不推荐)

官方实现一 : Brute Force

简介:

逐个检查所有子字符串,看它是否没有重复的字符。

算法:

写一个方法 boolean allUnique(String substring),如果子字符串中的字符都是唯一的,则返回true,否则返回false.我们可以遍历给定字符串s的所有可能的子字符串并调用函数allUnique(),如果结果是true,那么我们更新子字符串的最大长度.

现在让我们填补缺少的部分:

复杂度分析:

时间复杂度 : 两层O(n3):main()中两层遍历,方法中还有一层遍历.

空间复杂度 : O(min(n,m)):取决于字符串长度

官方实现二 : Sliding Window

滑动窗口是数组/字符串问题中常用的抽象概念。窗口是数组/字符串中的一系列元素,通常由开始和结束索引定义,即[i,j].

使用HashSet将字符存储在当前窗口[i,j]中(最初j = i)然后我们将索引jjj向右滑动,如果它不在HashSet中,我们进一步滑动j,这样做直到 s [j] 已经在HashSet中.此时,我们发现没有重复字符的子字符串的最大大小以索引i开头,为所有i执行此操作,会得到答案

复杂度分析;

时间复杂度 : O(n):一层循环

空间复杂度: O(min(m,n))

官方实现三 : Sliding Window Optimized

定义字符到其索引的映射,而不是使用一个集来判断字符是否存在。,然后我们可以在找到重复的字符时立即跳过字符.

原因是,如果s [j] 在[i,j] 的范围内具有索引j的重复,我们不会需要一点一点地增加i,我们可以跳过[i,j] 范围内的所有元素,并让i直接为j+ 1

还可以假设ASCII 128

以前的实现都没有对字符串s的字符集进行假设。

如果我们知道charset相当小,我们可以用整数数组替换Map作为直接访问表。

常用的表有:

int[26] for Letters ‘a’ - ‘z’ or ‘A’ - ‘Z’

int[128] for ASCII

int[256] for Extended ASCII

复杂度分析:

时间复杂度 : O(n).

空间复杂度(HashMap) : O(min(m,n)).

空间复杂度(Table): O(m).

小提示:

String的三种方法 indexOf(),lastIndexOf(),subString()

刷题之路第三题--Longest Substring Without Repeating Characters的更多相关文章

  1. 周刷题第二期总结(Longest Substring Without Repeating Characters and Median of Two Sorted Arrays)

    这周前面刷题倒是蛮开心,后面出了很多别的事情和问题就去忙其他的,结果又只完成了最低目标. Lonest Substring Without Repeating Characters: Given a ...

  2. leetcode第三题--Longest Substring Without Repeating Characters

    Problem:Given a string, find the length of the longest substring without repeating characters. For e ...

  3. 刷题3. Longest Substring Without Repeating Characters

    一.题目 Longest Substring Without Repeating Characters,具体请自行搜索. 这个题目,我看了一下,经过一番思考,我觉得实现起来不是很复杂. 但要做到bug ...

  4. leetcode第三题Longest Substring Without Repeating Characters java

    Longest Substring Without Repeating Characters Given a string, find the length of the longest substr ...

  5. (python)leetcode刷题笔记03 Longest Substring Without Repeating Characters

    3. Longest Substring Without Repeating Characters Given a string, find the length of the longest sub ...

  6. 【LeetCode刷题系列 - 003题】Longest Substring Without Repeating Characters

    题目: Given a string, find the length of the longest substring without repeating characters. Example 1 ...

  7. 【leetcode刷题笔记】Longest Substring Without Repeating Characters

    Given a string, find the length of the longest substring without repeating characters. For example, ...

  8. Leetcode第三题《Longest Substring Without Repeating Characters》

    题目: Given a string, find the length of the longest substring without repeating characters. For examp ...

  9. LeetCode第三题—— Longest Substring Without Repeating Characters(最长无重复子字符串)

    题目描述 Given a string, find the length of the longest substring without repeating characters. Example ...

  10. LeetCode 第 3 题(Longest Substring Without Repeating Characters)

    LeetCode 第 3 题(Longest Substring Without Repeating Characters) Given a string, find the length of th ...

随机推荐

  1. (map)水果 hdu1263

    水果 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submiss ...

  2. node.js(小案例)_使用mongodb对学生信息列表优化

    一.前言 1.这篇文章主要对上一篇案列在操作增删改的时候使用mongodb进行优化 2.项目源码(包含上):https://github.com/4561231/crud-express-node.g ...

  3. qml: QtCharts模块的使用(基本配置)------<一>

    QtCharts模块可以用于绘制图表: 导入模块: import QtCharts 2.2 例子: import QtQuick 2.0 import QtCharts 2.2 ChartView { ...

  4. python对象初始化

    当python对象被创建以后,需要将对象进行初始化.Python有一个构造函数和一个初始化函数: 1.构造函数__new__,只接受一个参数,即类本身(它会在对象被构造之前调用,所以这里也就没有sel ...

  5. python改文件名

    import os file_names = os.listdir('D:\\mobilefile\\_hd') for file_name in file_names : print(file_na ...

  6. Redash 安装部署

    介绍 是一款开源的BI工具,提供了基于web的数据库查询和数据可视化功能. 官网:https://redash.io/ GitHub:https://github.com/getredash/reda ...

  7. Elastic Stack之FileBeat使用实战

    Elastic Stack之FileBeat使用实战 作者:尹正杰  版权声明:原创作品,谢绝转载!否则将追究法律责任.   本篇博客数据流走向:FileBeat ===>logstash == ...

  8. CentOS在VirtualBox虚拟机中网络配置

    1. 宿主机网络参数  2. 右键设置,对虚拟机进行设置网络 3.虚拟机   vi   /etc/sysconfig/network-scripts/ifcfg-eth1   打开该配置文件 eth0 ...

  9. Spark Submitting Applications浅析

    Submitting Applications提交应用程序 在spark的bin目录下spark-submit脚本被用于在集群中启动应用程序.它可以通过一个统一的接口来使用Spark支持的所有集群管理 ...

  10. HTTP Method小记

    HTTP 0.9 这个版本只有GET方法 HTTP 1.0 这个版本有GET HEAD POST这3个方法 HTTP 1.1 这个版本是当前版本,包含GET HEAD POST OPTIONS PUT ...