题目介绍
给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。
示例 1:
输入: s = “abcabcbb”
输出: 3
解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。
示例 2:
输入: s = “bbbbb”
输出: 1
解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。
示例 3:
输入: s = “pwwkew”
输出: 3
解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。
请注意,你的答案必须是 子串 的长度,“pwke” 是一个子序列,不是子串。
自己的想法
看完题后我能想到的方法就是:
设置一个空列表,循环把字符串从头开始加入到列表,如果遇到重复的字符则把列表赋值给新的字符串,然后清空列表,从重复字符开始继续向后遍历。再遇到重复数字时把长度和新字符串的长度对比,如果比新字符串长度长,则替换新字符串,最后输出新字符串的长度。
尝试实现一下:
class Solution:
def lengthOfLongestSubstring(self, s: str) -> int:
list1 = []
str_new = ''
str_count = 0
if s:
for i in range(len(s)-1):
if s[i] not in list1:
list1.append(s[i])
str_count = max(len(str_new),len(list1))
if s[i+1] in list1:
if len(str_new)<len(list1):
str_new = ''.join(list1)
list1 = []
list1.append(s[i])
str_count = max(len(str_new)-1,len(list1))
if s[-1] not in list1:
list1.append(s[-1])
str_count += 1
str_new = ''.join(list1)
str_count = len(str_new)
return str_count
暴力解决问题。。但是提交的时候发现这种方式只对于部分测试是有效的,尝试改了几次之后发现没有办法满足所有测试。果然暴力还是不能解决问题。
去看了答案,居然有这么多方法。。(捂脸痛哭)
https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/solution/wu-zhong-fu-zi-fu-de-zui-chang-zi-chuan-cshi-xian-/
先去研究一下,有机会再回来更新