题目:
给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。
输入: "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
输入: "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
我在写这个题时,采用了暴力解法,采用两层循环,第一层循环遍历主串,第二层循环判断当前字符串存在于字串中否,时间复杂度较大。
较好的解法
class Solution:
def lengthOfLongestSubstring(self, s: str) -> int:
window = []
slen = len(s)
n = 0
for str in s:
if str not in window:
window.append(str)
else:
window[:] = window[window.index(str) + 1:]
window.append(str)
if len(window) > n:
n = len(window)
return n
采用了滑动窗口的方法,用一个容器放置字串,判断当前字符是否存在容器中,存在的话,就把字串左边直到相同字符处移除,右边补上该字符。该容器采用hash结构查找比较快。