力扣-- 无重复字符的最长子串

力扣-- 无重复字符的最长子串

1. 无重复字符的最长子串

给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。

示例 1:

输入: “abcabcbb”
输出: 3
解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。
示例 2:

输入: “bbbbb”
输出: 1
解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。
示例 3:

输入: “pwwkew”
输出: 3
解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。
请注意,你的答案必须是 子串 的长度,“pwke” 是一个子序列,不是子串。

2.解题思路

思路1:

将所有的可能性列出来,判断是否是重复的,思路正确,但是超时了。

class Solution:
    # 思路对超时
    def cf(self,s):
        t={}
        for i in range(len(s)):
            if s[i] not in t:
                t[s[i]]=1
            else:
                return True
        return False
    
    def lengthOfLongestSubstring(self, s: str) -> int:
        
        l=len(s)
        if l==0:
            return 0
        mlen=1
        for i in range(l):
            for j in range(i,l):
                if not self.cf(s[i:j+1]):
                    if mlen<len(s[i:j+1]):
                        mlen=len(s[i:j+1])
        return mlen

思路2:

将不重复的字符放入数组中, 并且记录一个最大的长度值,数组中重复,就把原数组变成从它后一个位置开始的数组。例如:
s=“abac” 第一轮,curr=[“a”] currlen=1,maxlen=1,第二轮,curr=[“a”,“b”],currlen=2,maxlen=2,第三轮,index=0,curr=[1:]=[“B”]
cur=[“b”,“a”],第四轮,curr=[“b”,“a”,“c”],maxlen=3,就完成了。

class Solution:

    def lengthOfLongestSubstring(self, s: str) -> int:
        
        	curr = []
            maxlen = 0
            for c in s:
                if c in curr:
                    index = curr.index(c)
                    curr = curr[index + 1:]
                    curr.append(c)
                else:
                    curr.append(c)
                    currlen = len(curr)
                    if currlen > maxlen:
                        maxlen = currlen
            
            return maxlen

猜你喜欢

转载自blog.csdn.net/weixin_41781408/article/details/88389879