声明:
因本人为AI路上的新手,文章用于辅助个人的整理记忆,理解难免有偏差之处,都是个人拙见,如给其他同僚造成困扰,还请见谅,非常非常非常欢迎私信共同讨论,共同进步
题目描述:
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.
解题思路:
- 如题所述,给定一字符串,找出其中的没有相同元素的最长的子字符串
- 那就从第一个元素开始,默认最长的从第一个元素开头,向下遍历字符串,遇到不同的,就加到第一个里面,遇到相同的,就直接break,同时记录长度是多少
- 下次同样的操作,但是从第二个元素开始,记录长度,与第一个比较,取大者
- 直至循环完成,找出最大
- 见代码,一目了然
少废话,上代码:
class Solution:
def lengthOfLongestSubstring(self, s: str) -> int:
max_length = 0#初始化最大长度,设为0
if len(s) == 1:#字符串长度为1,则最大长度即为本身
max_length = 1
else:
for n in range(len(s) - 1):#外循环,从第一个元素开始到倒数第二个元素结束,按照算法,依次寻找最大长度
curr_str = s[n]#每次寻找,设置为下一个元素
for i in range(n + 1, len(s)):#内循环,从初始化的元素的下一个开始
if s[i] in curr_str:#说明有重复元素
break
else:
curr_str += s[i]#没有,则加到初始化默认的字符串里
max_length = max(max_length, len(curr_str))#内循环结束一次后,即每找完一次后,比较长度
return max_length#最后外循环结束后,返回最大的那个长度
时间空间复杂度:
- Runtime: 432 ms, faster than 17.22% of Python3 online submissions for Longest Substring Without Repeating Characters.
- Memory Usage: 13 MB, less than 99.49% of Python3 online submissions for Longest Substring Without Repeating Characters.