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

Posted Assange

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode--003--无重复字符的最长子串相关的知识,希望对你有一定的参考价值。

问题描述:

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

示例 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--无重复字符的最长子串的主要内容,如果未能解决你的问题,请参考以下文章

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

LeetCode 003. 无重复字符的最长子串 双指针

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

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

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

Leetcode-003-无重复字符最长子串长度