LeetCode中等题之无重复字符的最长字串
题目
给定一个字符串 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中等题之无重复字符的最长字串相关推荐
- [剑指offer]面试题第[48]题[Leetcode][JAVA][第3题][无重复字符的最长字串][滑动窗口][HashSet/Map]
[问题描述][第3题][无重复字符的最长字串] 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度.示例 1:输入: "abcabcbb" 输出: 3 解释: 因为无重 ...
- python leetcode_python实现leetcode中无重复字符的最长字串
无重复字符的最长字串是一道经典的额字符串处理算法的题目,日常编程过程中,处理字符串是很多见的.用Python来实现leetcode这道算法题,这题会涉及到一个概念"滑动窗口"的概 ...
- php无重复字符的最长子串,无重复字符的最长字串问题
leetcode3:无重复字符的最长字串问题 问题描述 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb" 输出: 3 解释 ...
- (LeetCode刷题)Day03 无重复字符的最长子串
无重复字符的最长子串 [3. Longest Substring Without Repeating Characters](https://leetcode.com/problems/longest ...
- leetcode 刷题 3. 无重复字符的最长子串解题思路
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc&q ...
- 学渣的刷题之旅 leetcode刷题 3. 无重复字符的最长子串(暴力法、滑动窗口)
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc&qu ...
- LeetCode 3.无重复字符的最长字串(滑动窗口)
题目描述 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度. 示例 1: 输入: "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "a ...
- leetcode刷题:无重复字符的最长子串
题目: 分析: 取巧解法,通过set class Solution { public:int lengthOfLongestSubstring(string s) {if(s.size() == 0) ...
- leetcode刷题:1.无重复字符的最长字串
题目: 方法一: 首先我们可以想到暴力解法,就是 ·逐个生成字符串 ·看他受否含有重复字符 如下代码暴力法: int LenOfUniqueStr(char* Start) {int Validity ...
最新文章
- Java 8按属性区分
- 爬虫提取非结构化数据
- Java学习lesson 02
- MYSQL中只知表名查询属于哪个SCHEMA
- WCF简单教程(5) 用IIS做Host
- android 滚动条自定义样式,IScroll的使用-方向键绑定自定义滚动条样式
- LAMP+LNMP(一) LAMP架构概述
- JS判断客户端是手机还是PC的2个代码
- docker数据卷的使用 -v --volumes--from
- Java相关资源下载路径
- Spring/Spring boot正确集成Quartz及解决@Autowired失效问题
- 9套Android实战经典项目
- (七)视频背景移除/去背景/换背景/抠图/抠像代码示例:实时抠图、实时抠像、人像去背景、背景消除
- 这届打工人,回家过年都这么难
- 红海竞争下,「社交+」在中东泛娱乐 App 市场的出海新机遇
- JITSI开源视频直播
- rootkit后门程序开发测试过程
- 我的世界手机java版下载_我的世界java版下载手机版-我的世界java版手机版v1.16 - 手机迷...
- php+生成条形码18位,php实现在线生成条形码示例分享(条形码生成器)
- 微信小程序实现可移动悬浮按钮(超简单)