leetcode第3题入口

题目描述

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



示例 1:

输入: s = "abcabcbb"

输出: 3

解法1:暴力破解

  1. 逐个生成子串

  1. 判断子串是否包含重复字符

时间复杂度:

  • 找到所有子串 O(n^2)

  • 判断子串是否包含重复字符 HashSet O(n),双指针O(n^2)

  • 整体复杂度O(n^3)

空间复杂度:

HashSet O(n)

️注:该方法复杂度过高,在leetCode提交会超时,这里就不在出代码示例。


解法2: 滑动窗口

关键字:重复字符 -> 出现1次以上

  • 模式识别1: 出现次数 代表 将使用散列表 (记录次数,参考专栏leetcode第一题讲解)

  • 构建子串 :散列表存储下标

  • 模式识别2: 涉及到子串,考虑滑动窗口

滑动窗口滑动规则:当遇到子串就是窗口中的串存在的字符时,窗口向右滑动,使得窗口正好跨过第一个重复字符(思考:为什么不是第二个?)

窗口的表现形式:开始坐标、窗口长度两个变量。

import java.util.*;
class Solution {
public int lengthOfLongestSubstring(String s) {
Hashtable<Character,Integer> table = new Hashtable();
int maxLength = 0;
int currentLength = 0;
int startIndex = 0;
char[] arr = s.toCharArray();
for(int i=0;i<arr.length;i++){
if(null == table.get(arr[i]) || table.get(arr[i])<startIndex){
currentLength++;
}
else{
//缩放窗口
startIndex = table.get(arr[i]);
currentLength = i-startIndex;
}
table.put(arr[i],i);
if(currentLength>maxLength){
maxLength = currentLength;
}
}
return maxLength;
}
}

时间复杂度:O(n)

空间复杂度:O(n)

[每日算法] leetcode第3题:无重复字符的最长子串的更多相关文章

  1. LeetCode 第三题--无重复字符的最长子串

    1. 题目 2.题目分析与思路 3.思路 1. 题目 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3 ...

  2. Leetcode(3)无重复字符的最长子串

    Leetcode(3)无重复字符的最长子串 [题目表述]: 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 第一种方法:暴力 执行用时:996 ms: 内存消耗:12.9MB 效果: ...

  3. LeetCode刷题--无重复字符的最长子串(中等)

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

  4. 【LeetCode题解】3_无重复字符的最长子串(Longest-Substring-Without-Repeating-Characters)

    目录 描述 解法一:暴力枚举法(Time Limit Exceeded) 思路 Java 实现 Python 实现 复杂度分析 解法二:滑动窗口(双指针) 思路 Java 实现 Python 实现 复 ...

  5. leetcode题解#3:无重复字符的最长子串

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

  6. Leetcode(3)-无重复字符的最长子串

    给定一个字符串,找出不含有重复字符的最长子串的长度. 示例: 给定 "abcabcbb" ,没有重复字符的最长子串是 "abc" ,那么长度就是3. 给定 &q ...

  7. Newtonsoft.Json C# Json序列化和反序列化工具的使用、类型方法大全 C# 算法题系列(二) 各位相加、整数反转、回文数、罗马数字转整数 C# 算法题系列(一) 两数之和、无重复字符的最长子串 DateTime Tips c#发送邮件,可发送多个附件 MVC图片上传详解

    Newtonsoft.Json C# Json序列化和反序列化工具的使用.类型方法大全   Newtonsoft.Json Newtonsoft.Json 是.Net平台操作Json的工具,他的介绍就 ...

  8. LeetCode 第 3 题:无重复字符的最长子串(滑动窗口)

    LeetCode 第 3 题:无重复字符的最长子串 (滑动窗口) 方法:滑动窗口 滑动窗口模板问题:右指针先走,满足了一定条件以后,左指针向前走,直到不满足条件. 特点:左右指针的方向是一致的,并且是 ...

  9. leetcode刷题第三天<无重复字符的最长子串>

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

  10. C# 算法题系列(一) 两数之和、无重复字符的最长子串

    题目一 原题链接 https://leetcode-cn.com/problems/two-sum/ 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整 ...

随机推荐

  1. tomcat源码分析(一)如何启动服务

    从startup.sh入手 os400=false case "`uname`" in OS400*) os400=true;; esac PRG="$0" w ...

  2. (六).NET6.0通用读取配置文件功能

    1.新增Microsoft.Extensions.Configuration包 在启动项目下,设置appsettings.json属性为始终复制 2.新建一个文件夹Common,用于存放工具类项目.并 ...

  3. sqlserver空间数据 + c# 实现查询附近的设备

    前言 一个小需求的实现,做一个备忘,个人理解,可能存在错误. 客户有很多设备,这些设备分散在不同的地方,现在需要通过小程序获取附近的(比如1000米)之类的设备列表,以距离排序 第一个想到的的是找百度 ...

  4. 使用ffmpeg去除音频静音

    直接使用cmd命令ffmpeg -i input.wav -af silenceremove=stop_periods=-1:stop_duration=1:stop_threshold=-30dB ...

  5. c# WindowsCommunityToolkit--- Shade Animation

    WindowsCommunityToolkit: https://github.com/CommunityToolkit/WindowsCommunityToolkit You can also pr ...

  6. SpringCloud与Dubbo的区别

    1.SpringCloud与Dubbo的区别两者都是现在主流的微服务框架,但却存在不少差异: 初始定位不同:SpringCloud定位为微服务架构下的一站式解决方案:Dubbo 是 SOA 时代的产物 ...

  7. Java一个入门级MVC基于Spring Boot项目

    首先根据上一篇文章内容创建一个Spring Boot项目,如图所示: 一,创建Controller并返回数据 在src/main/java/项目文件夹下面创建package,继续里面可以创建模块的pa ...

  8. idea操作小技巧总结

    一.热键 光标导航前进|后退 Ctrl+Alt+左右方向键 光标转到语句块的头尾 Ctrl+[|] 再次提示函数参数列表 Ctrl+P 插入实时模板 Ctrl+J 文件结构查看 Ctrl+F12 书签 ...

  9. pg数据库性能优化(转)

    参数修改的方式 1.修改配置文件 在配置文件data目录下postgresql.conf 中直接修改,修改前记得备份一下原文件.修改完成之后,记得重启数据库哦. 2.命令行的修改方式 ALTER SY ...

  10. Luogu P10838 『FLA - I』庭中有奇树 题解 [ 绿 ] [ 二分 ] [ 双指针 ] [ 树的遍历 ]

    庭中有奇树:很多算法揉在一起的好题. 转化题意 因为要封锁 \(m\) 条路径,根据贪心思想,他一定会封锁最短的 \(m\) 条路径.所以我们能走的最短传送路径就是最短的第 \(m+1\) 条路径. ...