当前位置: 首页 > 后端技术 > Python

LeetCode无重复字符的最长子串

时间:2023-03-25 22:39:14 Python

无重复字符的最长子串题目来源:https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/题目给定一个字符串,求其长度不包含重复字符的最长子串。示例1:输入:"abcabcbb"输出:3解释:因为最长的无重复子串是"abc",它的长度为3。示例2:输入:"bbbbb"输出:1解释:因为最长的没有重复字符的子串是"b",它的长度是1。例3:输入:"pwwkew"输出:3解释:因为最长的没有重复字符的子串是"wke",它的长度是3。注意答案必须是子串,“pwke”是子序列,而不是子串。解题思路:滑动窗口;定义字符与字典中位置的映射关系,键值为字符,值为字符位置+1,表示最后一个字符位置不重复;定义最长子串的起始位置为start,end表示子串的结束位置,[start,end]为最长不重复子串;遍历字符串,如果[start,end]区间有重复字符,则获取map中当前字符的值,更新子串的起始位置为start,返回子串的长度max_len和字典映射同时更新。代码实现类Solution:deflengthOfLongestSubstring(self,s:str)->int:'''求最长不带重复字符的子串的长度args:s:传入的字符串Returns:返回最长不带重复字符的子串的长度thelongestsubstring'''#返回最长子串的长度max_len=0#用于存储字母和位置的映射map_char_pos={}#表示返回最长子串的开始start=0#遍历字符串,[start,end]区间表示最长子串forendinrange(len(s)):ifs[end]inmap_char_pos:#如果字符重复,重新定义最长子串的起始位置start=max(map_char_pos[s[end]],start)#更新最长子串的长度max_len=max(max_len,end-start+1)#更新映射map_char_pos[s[end]]=end+1returnmax_len上面是主要实现的这篇文章的内容。欢迎关注微信公众号《书所集录》