求无重复最长子字符串的长度 -python
原题:
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
示例 1:
输入: "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
示例 2:
输入: "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
示例 3:
输入: "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。
对这题的思考:
可以先创建个空间A,用来接收无重复字符串
判断下一个字符是否在 A中
如果不在,则加入到A中最后的位置
如果在,分情况:
1.在空间的第一个位置,则把第一个砍掉,加入这个字符到A最后
2.如果在A末尾,则清空A,把这个元素加入到A中,继续判断
3.如果在A中间位置,则找到他的位置把他前面包括他一块砍掉,再把他加入到结尾
def lengthOfLongestSubstring(str1):
"""
:type s: str
:rtype: int
"""
mystack = []
mylist = list(str1)
max_len = 0
if len(str1) <= 1:
return len(str1)
for i in mylist:
if i in mystack:
if i == mystack[0]:
mystack.pop(0)
mystack.append(i)
elif i == mystack[len(mystack)-1]:
if len(mystack) > max_len:
max_len = len(mystack)
mystack = [i]
else:
ind = mystack.index(i)
mystack = mystack[ind+1:]
mystack.append(i)
else:
mystack.append(i)
if len(mystack) > max_len:
max_len = len(mystack)
return max_len
暴力遍历时间复杂度会高,这样遍历了一遍列表,时间复杂度为O(n)+ ?
还想过用动态规划的方法去实现,是不是比较复杂?
本人是一名菜鸟,欢迎各位大佬指导,交流。