题解代码
class Solution: def lengthOfLongestSubstring(self, s: str) -> int: length = len(s) res = 0 count = 0 for i in range(length): count = 1 dic = {s[i]: 1} for j in range(i + 1, length): if dic.get(s[j], 0): res = max(res, count) break else: count += 1 dic[s[j]] = 1 else: res = max(res, count) if res > length - i: return res return max(res, count)
一、整体分析
1. 该题难度中等,寻找一个字符串中最长的不含重复字母的字串(连续)。
2. 首先可以想到使用暴力破解的方式,即循环遍历字符 s ,求出以每个字符为首所得的最长无重复字符的字串的长度,
然后返回所有字符对应的最长无重复字符的字串长度的最大值。
二、具体做法
1. 变量 res 存储最长的无重复字串的长度,每次遍历对其进行更新,避免存储以所有字符为首的无重复字串的长度造成空间和时间上的浪费。
2. 变量 count 计算以当前字符为首目前所能构成的无重复字串的长度(该变量通过二重循环更新)。
3. 变量 dic 为一个字典,用来对比当前二重循环所得的字符是否可以和之前遍历到的字符组合以共同构成无重复字串的一部分,
若当前字符已经存在在 dic 里面,那么说明该字符在之前已经出现,循环应该立即终止,当前 count 的值即为以该字符为首所能构成的最长无重复字串的长度,
随后进行下一个字符的遍历,重新初始化 count 与 dic。