题目

给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。
示例 1:
输入: s = “abcabcbb”
输出: 3
解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。
示例 2:
输入: s = “bbbbb”
输出: 1
解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。
示例 3:
输入: s = “pwwkew”
输出: 3
解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。
请注意,你的答案必须是 子串 的长度,“pwke” 是一个子序列,不是子串。
示例 4:
输入: s = “”
输出: 0
提示:
0 <= s.length <= 5 * 10^4
s 由英文字母、数字、符号和空格组成
来源:力扣(LeetCode)

解题思路

  这道题一眼看上去可以先使用暴力搜索的方法,然后对暴力搜索的关键步骤进行优化。首先以第一个字母为头计算其最长字串的长度,然后以第二个…直到最后一个字母。

class Solution:def lengthOfLongestSubstring(self, s: str) -> int:if len(s)<2:return len(s)MAX=1 #存储最长字串的长度for i in range(len(s)):temp=s[i]  #以第i个字母为头的字串count=1   #统计字符个数for j in range(i+1,len(s)):if s[j] not in temp: #判断下一个字母是否已经存在temp=temp+s[j]  #构成字串count+=1       #更新长度if count>MAX:   #更新最大字串长度值MAX=countelse:breakreturn MAX


  分析个例,比如示例1,我们首先以’a’为头寻找最长的字串当遍历完’c’之后发现’a’已经存在故以第一个’a’为头的字串(‘abc’)长度最长为3,接下来继续寻找以第二个字符’b’为头的字串,在这里第三个字符’c’其实已经在第一次遍历的时候依次和‘a’,‘b’对比过了,在暴力搜索的方案里这个是多比较了的,这里可以优化,那么以‘b’为头的字串就可以直接从第四个字符‘a’开始对比并。那么在这里的优化方案其实就是我们最常用的滑动窗口,窗口每次向右滑动一个字符的长度只需要对比新加入的成员,当然滑动窗口只是优化了中间部分字符的对比。另外,一个优化小tips,可以使用python的set函数先对目标字符串进行处理如果处理后的字符串长度为1或者2,那么就可以直接返回结果了。

class Solution:def lengthOfLongestSubstring(self, s: str) -> int:S=set(s)maxlenth=len(S)   #不重复字串可能到达的最长长度if maxlenth<3:return len(S)  Frame=[]     #设置窗口right=-1MAX=1for i in range(len(s)):if i!=0:     Frame=Frame[1:]    #左指针右移while right+1<len(s) and s[right+1] not in Frame:  #构造当前左指针所指字符开头下字串的最长情况Frame.append(s[right+1]) right+=1if MAX<right-i+1:MAX=right-i+1if MAX==maxlenth:return MAXreturn MAX

LeetCode中等题之无重复字符的最长字串相关推荐

  1. [剑指offer]面试题第[48]题[Leetcode][JAVA][第3题][无重复字符的最长字串][滑动窗口][HashSet/Map]

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

  2. python leetcode_python实现leetcode中无重复字符的最长字串

    ​无重复字符的最长字串是一道经典的额字符串处理算法的题目,日常编程过程中,处理字符串是很多见的.用Python来实现leetcode这道算法题,这题会涉及到一个概念"滑动窗口"的概 ...

  3. php无重复字符的最长子串,无重复字符的最长字串问题

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

  4. (LeetCode刷题)Day03 无重复字符的最长子串

    无重复字符的最长子串 [3. Longest Substring Without Repeating Characters](https://leetcode.com/problems/longest ...

  5. leetcode 刷题 3. 无重复字符的最长子串解题思路

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

  6. 学渣的刷题之旅 leetcode刷题 3. 无重复字符的最长子串(暴力法、滑动窗口)

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

  7. LeetCode 3.无重复字符的最长字串(滑动窗口)

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

  8. leetcode刷题:无重复字符的最长子串

    题目: 分析: 取巧解法,通过set class Solution { public:int lengthOfLongestSubstring(string s) {if(s.size() == 0) ...

  9. leetcode刷题:1.无重复字符的最长字串

    题目: 方法一: 首先我们可以想到暴力解法,就是 ·逐个生成字符串 ·看他受否含有重复字符 如下代码暴力法: int LenOfUniqueStr(char* Start) {int Validity ...

最新文章

  1. Java 8按属性区分
  2. 爬虫提取非结构化数据
  3. Java学习lesson 02
  4. MYSQL中只知表名查询属于哪个SCHEMA
  5. WCF简单教程(5) 用IIS做Host
  6. android 滚动条自定义样式,IScroll的使用-方向键绑定自定义滚动条样式
  7. LAMP+LNMP(一) LAMP架构概述
  8. JS判断客户端是手机还是PC的2个代码
  9. docker数据卷的使用 -v --volumes--from
  10. Java相关资源下载路径
  11. Spring/Spring boot正确集成Quartz及解决@Autowired失效问题
  12. 9套Android实战经典项目
  13. (七)视频背景移除/去背景/换背景/抠图/抠像代码示例:实时抠图、实时抠像、人像去背景、背景消除
  14. 这届打工人,回家过年都这么难
  15. 红海竞争下,「社交+」在中东泛娱乐 App 市场的出海新机遇
  16. JITSI开源视频直播
  17. rootkit后门程序开发测试过程
  18. 我的世界手机java版下载_我的世界java版下载手机版-我的世界java版手机版v1.16 - 手机迷...
  19. php+生成条形码18位,php实现在线生成条形码示例分享(条形码生成器)
  20. 微信小程序实现可移动悬浮按钮(超简单)

热门文章

  1. 2022-2028年中国集装箱涂料行业市场研究及前瞻分析报告
  2. 在批评中改变自己,才能真正取得进步
  3. LeetCode简单题之位1的个数
  4. OneFlow 概念清单
  5. MindSpore模型推理
  6. 转置卷积Transposed Convolution
  7. TensorRT-安装-使用
  8. RGB-D相机视觉SLAM
  9. HarmonyOS 修改App 的name
  10. Java 反射 (快速了解反射)