题解 | #最长不含重复字符的子字符串#

最长不含重复字符的子字符串

https://www.nowcoder.com/practice/48d2ff79b8564c40a50fa79f9d5fa9c7

#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @param s string字符串 
# @return int整型
#
class Solution:
    def lengthOfLongestSubstring(self , s: str) -> int:
        # write code here

		#@如果s为空字符串,直接返回1
        if s == " ":
            return 1
		  
        #定义双指针,start用于指示最大字符串的头索引, end用于指示尾部索引
        start = 0
        end = 1

        #定义最长字符串的头索引和尾部索引
        max_start = 0
        max_end   = 1

        maxlength = 0
        #初始化dp的列表,列表中存放最大字符串的长度
        dp = [ i  for i in range(len(s) ) ]

        #初始化dp数组,当下标为0时表示的是下标为0的情况下,最大字符串的长度,这里肯定为1,因为前面没有字符串了    
        dp[0]=1
        

        #dp i存在俩种情况,
        #情况1:dpi以前面的字符串没有重复
        for i in range(1,len(s)):
            if s[i] not in s[start:end]:
                dp[i]=dp[i-1]+1
                end += 1
        #情况2:dpi以前的字符串重复了,
        #找到重复的位置,start重新在重复位置的基础上+1
        #end的值加1
            else:
                index = s[start:end].find(s[i])
                start = start + index + 1
                end +=1
        #如果需要定位最长的字串,只需要将最长情况下的索引保存到max_end,max_start
            if end - start > max_end - max_start:
                max_start = start
                max_end   = end
        
            maxlength = max(maxlength,end-start)
        print(dp)
        return maxlength

全部评论

相关推荐

10-27 17:26
东北大学 Java
点赞 评论 收藏
分享
努力成为C语言高手:质疑大祥老师,理解大祥老师,成为大祥老师
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务