问题
# 给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
#
# 示例 1:
#
# 输入: "abcabcbb"
# 输出: 3
# 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
#
#
# 示例 2:
#
# 输入: "bbbbb"
# 输出: 1
# 解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
#
#
# 示例 3:
#
# 输入: "pwwkew"
# 输出: 3
# 解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
# 请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。
#
# Related Topics 哈希表 双指针 字符串 Sliding Window
# 👍 4091 👎 0
代码
# leetcode submit region begin(Prohibit modification and deletion)
class Solution(object):
def lengthOfLongestSubstring(self, s):
"""
:type s: str
:rtype: int
"""
k = -1 # 记录起始位置
res = 0 # 记录长度
c_dict = {} # 记录下标
for i, c in enumerate(s):
# 出现过,并且上次出现的位置在起始位置之前
if c in c_dict and c_dict[c] > k:
k = c_dict[c]
else:
res = max(res, i - k)
# 更新最后一次出现的下标
c_dict[c] = i
return res
# leetcode submit region end(Prohibit modification and deletion)
if __name__ == '__main__':
print(Solution().lengthOfLongestSubstring("tmmzuxt"))