描述
给定一个字符串 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 * 104
s 由英文字母、数字、符号和空格组成
Related Topics
- 哈希表
- 字符串
- 滑动窗口
👍 6817
👎 0
题解
python
一开始想用集合添加判断长度的方式去写,但是后来发现不好定位下一个不重复子串位置,于是用列表做
"""
6:31 PM info
解答成功:
执行耗时:44 ms,击败了76.76% 的Python用户
内存消耗:13.2 MB,击败了94.93% 的Python用户
"""
class Solution(object):
def lengthOfLongestSubstring(self, s):
if not s:
return 0
max_str = []
max_len = 0
tmp_len = 0 # 记录当前数组长度,减少调用len方法次数
for val in s:
if val in max_str:
idx = max_str.index(val)
max_len = tmp_len if tmp_len > max_len else max_len
max_str = max_str[idx + 1:] # 将重复字符及其以前全部丢弃
tmp_len -= idx + 1 # 记录长度
max_str.append(val)
tmp_len += 1
return tmp_len if tmp_len > max_len else max_len