lc#3求字符串中不包含重复字符的最大长度子串
2017-12-15 10:35
351 查看
问题描述
给定一个字符串,求出该字符串中不包含重复字符的最大长度子串的长度。
测试用例:
“abcabcbb” -> 最大子串”abc”,长度是3
“bbbbb” -> 最大子串”b”,长度是1
“pwwkew” -> 最大子串”wke”,长度是3
解答
遍历字符串,我们假设有个窗口,这个窗口在从字符串左侧开始由左向右移动,窗口中包含的是字符串中没有重复字符的子串。我们以字符串
abcdfcab为例,窗口先包含
a,遍历到
b,窗口中不包含
b,则将
b添加到窗口中,以此类推一直到
f,再到
c,
因为窗口中已经有
c,记录当前
max_len = max(len,max_len),
max_len初始值为0,此时,窗口去掉之前从
a到第一个
c的部分,
并把第二个c加进来,保证窗口中字符的唯一性,以此类推直到结束字符串遍历,返回
max_len即为最优解。
如下图,max_len = 5
class Solution(object): def lengthOfLongestSubstring(self, s): """ :type s: str :rtype: int """ list = [] # 窗口 max_size = 0 i = 0 while i < len(s): #遍历字符串 if s[i] not in list: list.append(s[i]) #如果不在窗口中,则放入窗口 else: max_size = max(max_size, len(list)) #保存当前最大的len list = list[list.index(s[i]) + 1:] #截取窗口从重复字符之前的部分,包括重复的字符本身 list.append(s[i]) #将新的字符放进窗口 i += 1 max_size = max(max_size, len(list)) return max_size
相关文章推荐
- 从字符串S中找出不包含重复字符的最大连续子字符串长度
- 字符串中不重复连续字符子串的长度最大值
- 找出字符串中最大子串的长度(要求子串中的字符不重复)
- 求字符串内不包含重复字符的最长子串的集合
- 得到一个字符串最大无重复子串长度
- leetcode-java.T003_LongestSubstringWithoutRepeatingCharacters 给定一个字符串,找字符中的最大非重复子串
- 百度面试题 求字符串中不含重复字符的最长子串长度
- 求给定的某一个字符串中的最长的没有重复字符的子串的长度
- 面试题12:字符串无重复子串的最大长度
- java 获得字符串中最大重复子串长度
- 求一字符串最长不重复字符子串的长度【Java 版】
- 统计字符串中连续出现某些字符的最大子串长度
- 没有重复字符的子串的最大长度
- 求字符串中不含重复字符的最长子串的长度
- 查找字符串中字符不重复的最大子串(C/C++)
- 如果字符串的一个子串(其长度大于 1)的各个字符均相同,则称之为等值子串。试设计一算法,求出串S中的最大等值子串 函数返回最大等值子串的长度,如果没有则返回1。 例如: 若S= “abc123abc1
- 一个字符串中包含另一个字符串所有字符的最短子串长度?——《编程之美》最短摘要的生成的简化
- 求一个字符串的最长不重复子串的最大长度
- 求字符串的不重复字符的最长子串长度的问题
- (字符串哈希表)找到字符串中不重复出现字符的最长子串长度