这是一个关于字符串的经典问题,给定一个字符串,求出其中最长的不含有重复字符的子串。例如,给定字符串 abcabcbb
,则其中最长的不含重复字符的子串为 abc
,长度为 3
。
一种解决这个问题的方法是使用滑动窗口。我们可以从字符串的开头开始,逐个添加字符,直到出现重复字符,然后从重复字符的位置开始继续添加字符。每次添加字符时,我们可以使用一个哈希表来存储字符的位置,如果当前字符已经出现过,则更新哈希表中字符的位置,并更新窗口的起始位置。
具体思路如下:
当我们遍历字符串时,可以用一个滑动窗口来维护当前不含重复字符的子串。每次添加字符时,如果该字符在窗口中已经出现过,则更新窗口的起始位置,使窗口不包含重复字符。
算法的具体步骤如下:
- 定义滑动窗口的起始位置
start
和结束位置end
,初始时start=0
和end=0
。 - 定义一个哈希表
char_index
来存储字符在字符串中的位置。 - 定义一个变量
max_len
表示最长不含重复字符的子串的长度,初始时设为0
。 - 遍历字符串中的每一个字符,记当前字符为
char
,当前字符在字符串中的位置为index
。 - 如果字符
char
已经在窗口中出现过,即字符char
在哈希表char_index
中对应的值不为0
,并且该值大于等于窗口的起始位置start
,则更新窗口的起始位置start
为char_index[char] + 1
。 - 更新窗口的结束位置
end
为index
,并更新哈希表char_index
中字符char
对应的值为index
。 - 更新最长不含重复字符的子串的长度
max_len
,即max_len = max(max_len, end - start + 1)
。 - 重复步骤 4-7,直到遍历完整个字符串。
- 返回最长不含重复字符的子串的长度
max_len
。
以下是一个用 Python 实现的示例代码:
def length_of_longest_substring(s: str) -> int:
# 定义窗口的起始位置和结束位置
start: int = 0
end: int = 0
# 定义一个哈希表存储字符的位置
char_index: dict = {}
# 最长不含重复字符的子串的长度
max_len: int = 0
# 遍历字符串
for index, char in enumerate(s):
# 如果字符 char 已经在窗口中出现过,更新窗口的起始位置
if char in char_index and char_index[char] >= start:
start = char_index[char] + 1
# 更新窗口的结束位置和窗口中字符 char 的位置
end = index
char_index[char] = index
# 更新最长不含重复字符的子串的长度
max_len = max(max_len, end - start + 1)
return max_len
使用该算法,我们可以输入字符串 abcabcbb
,得到最长不含重复字符的子串的长度 3
,即为题目中给出的示例的答案。
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
ABC
+关注
关注
0文章
12浏览量
8725 -
字符
+关注
关注
0文章
229浏览量
24889 -
字符串
+关注
关注
1文章
552浏览量
20135
发布评论请先 登录
相关推荐
求一个删除重复字符串的正则表达式
有一条字符串,其中可能包含数字,字母。 例如:00007,0000F,0000C,00007,0000D,0000C,00002,0000D ......要求保留不重复的和一个重复的字符串
发表于 08-16 09:45
【编测编学】零基础学python_04_字符串(删除空白)分析
删除字符串中的空白: 在程序中,额外的空白可能令人迷惑。对程序员来说,'python' 和'python ' 看起来几乎没什么两样,但对程序来说,它们却是两个不同的字符串。
发表于 11-14 11:24
STM32使用中断接收字符串可重复接收吗
STM32使用中断接收字符串,可重复接收,使用\r\n作为接收结束的标志(这里也可以自己定义)。主要代码如下:串口的函数#include "stm32f10x.h"
发表于 08-13 06:33
2.6 python字符串格式化
2.6 python字符串格式化格式化输出,主要有三种方式使用 % 进行格式化使用 format 函数进行格式化使用 f-string 进行格式化由于这三种格式化的内容都非常的多,我只介绍最常
发表于 02-21 16:28
python3如何取出重复3次的字符串保存为3列
本文档的主要内容详细介绍的是python3如何取出重复3次的字符串保存为3列详细资料免费下载C语言资料说明。
发表于 11-16 16:17
•4次下载
如何解决Python爬虫中文乱码问题?Python爬虫中文乱码的解决方法
如何解决Python爬虫中文乱码问题?Python爬虫中文乱码的解决方法 在Python爬虫过程中,遇到中文乱码问题是常见的情况。乱码问题主要是由于编码不一致所导致的,下面我将详细介绍
评论