码迷,mamicode.com
首页 > 其他好文 > 详细

LeetCode--003--无重复字符的最长子串

时间:2018-10-16 01:49:32      阅读:202      评论:0      收藏:0      [点我收藏+]

标签:for   sed   bsp   let   self   elf   strong   答案   必须   

问题描述:

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

示例 1:

输入: "abcabcbb"
输出: 3 
解释: 无重复字符的最长子串是 "abc",其长度为 3。

示例 2:

输入: "bbbbb"
输出: 1
解释: 无重复字符的最长子串是 "b",其长度为 1。

示例 3:

输入: "pwwkew"
输出: 3
解释: 无重复字符的最长子串是 "wke",其长度为 3。
     请注意,答案必须是一个子串"pwke" 是一个子序列 而不是子串。
学业繁重,没时间写了。。。。。。

方法1:s="pwwkew"  d={} ({"p":0,"w":1,"w":2,"k":3,"e":4,"w":5}) ,当s[i]在d中,start=d[s[i]] + 1从下一个位置开始,temp 存储最大长度 temp=max(i-start+1,temp)

 1 class Solution:
 2     def lengthOfLongestSubstring(self, s):
 3         """
 4         :type s: str
 5         :rtype: int
 6         """
 7         d={}
 8         start = 0
 9         temp = 0
10         for i in range(len(s)):
11             if s[i] in d and start <= d[s[i]]:
12                 start = d[s[i]] + 1
13             temp = max(temp,i-start+1)
14             d[s[i]] = i
15         return temp
16                 

方法2:

 1 class Solution:
 2     def lengthOfLongestSubstring(self, s):
 3         """
 4         :type s: str
 5         :rtype: int
 6         """
 7         sub=‘‘
 8         sub_len=0
 9         max_len=0
10         max_sub=‘‘
11         for letter in s:
12             if letter in sub:
13                 if sub_len>max_len:
14                     max_len=sub_len
15                     max_sub=sub
16                 index=sub.index(letter)
17                 sub=sub[index+1:]+letter
18                 sub_len=sub_len-index
19             else:
20                 sub=sub+letter
21                 sub_len+=1
22         if sub_len>max_len:
23             max_len=sub_len
24         return max_len

方法3:

 1 class Solution:
 2     def lengthOfLongestSubstring(self, s):
 3         """
 4         :type s: str
 5         :rtype: int
 6         """
 7         start = max_len = 0
 8         used = {}
 9         
10         for i in range(len(s)):
11             if s[i] in used and start <= used[s[i]]:
12                 start = used[s[i]] + 1
13             else:
14                 max_len = max(max_len, i - start + 1)
15             used[s[i]] = i
16             
17         return max_len

2018-10-15 22:43:21

LeetCode--003--无重复字符的最长子串

标签:for   sed   bsp   let   self   elf   strong   答案   必须   

原文地址:https://www.cnblogs.com/NPC-assange/p/9795247.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!