leetcode 3. Longest Substring Without Repeating Characters Python
Description
Given a string, find the length of the longest substring without repeating characters.
Example 1:
Input: "abcabcbb"
Output: 3
Explanation: The answer is "abc", with the length of 3.
Example 2:
Input: "bbbbb"
Output: 1
Explanation: The answer is "b", with the length of 1.
Example 3:
Input: "pwwkew"
Output: 3
Explanation: The answer is "wke", with the length of 3. Note that the answer must be a substring, "pwke" is a subsequence and not a substring.
问题分析
本题是一道中等题,意思是给定一个字符串,返回字符串的最长不重复子串.
明白了题目的意思,就知道如何动手去做了,最直接的方法就是进行暴力搜索,我用暴力搜索实现后,又去参考了下别人的实现,改进了下,只需要一重循环即可。
代码实现
暴力搜索实现
class Solution:
def lengthOfLongestSubstring(self, s: str) -> int:
length = 0
res = set()
for i in range(len(s)):
for j in range(i, len(s)):
if s[j] not in res:
res.add(s[j])
else:
if len(res) > length:
length = len(res)
res.clear()
break
if len(res) > length:
length = len(res)
return length
改进实现
class Solution:
def lengthOfLongestSubstring(self, s: str) -> int:
max_length = 0
current_length = 0
sub = ""
for i in range(len(s)):
if s[i] in sub:
index = sub.index(s[i])
sub = sub[index + 1:]
current_length = len(sub)
sub += s[i]
current_length += 1
if current_length > max_length:
max_length = current_length
return max_length
运行结果对比
从图中可以看出,二者的运行时间相差还是挺多的,因此要善于借鉴别人的优秀代码,慢慢提高自己写代码的能力。
ok!大功告成了,如果你有其他的方法或者问题,欢迎在评论区交流。