一、题目描述
给定一个字符串,请你找出其中不含有重复字符的最长子串
的长度。
示例1:
输入: "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
示例2:
输入: "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
示例3:
输入: "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。
二、思路 & 代码实现
1. 思路
使用两个for循环,外层循环控制起始位置,内层循环从起始元素开始,将未重复元素添加到一个临时数组,遇到重复元素就退出循环。将临时数组的长度也就是子串的长度添加到一个数组。最后比较数组内所有元素的最大值便是最长子串的长度。
2. 代码实现
class Solution:
def lengthOfLongestSubstring(self, s: str) -> int:
# 默认子串长度为0
# 1 使用常数统计最长子串长度
# result = 0
# 2 使用数组统计所有子串长度
result = [0]
length = len(s)
for i in range(length):
cur = []
for j in range(i, length):
if s[j] not in cur:
cur.append(s[j])
else:
break
#if len(cur) > result:
# result = len(cur)
if len(cur) > 0:
result.append(len(cur))
#return result
return max(result)
3. 表现
记录方式 | 运行时间 | 表现 | 内存消耗 | 表现 |
---|---|---|---|---|
1 | 2168ms | 4% | 13.4MB | 32% |
2 | 2164ms | 5.01% | 13.3MB | 84.95% |