一、题目描述
给定一个字符串 s ,请你找出其中不含有重复字符的最长子串的长度。
示例 1
输入: s = "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。
示例 2
输入: s = "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。
示例 3
输入: s = "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
提示:请注意,你的答案必须是子串的长度,"pwke" 是一个子序列,不是子串。
二、代码
代码如下:
def lengthOfLongestSubstring(s):
list =[]
lenlist = [1]
num =1
if len(s) != 0:
for e in s:
list.append(e)
if len(list) != len(set(list)):
lenlist.append(len(list)-1)
list.reverse()
while len(list) != len(set(list)):
list.pop()
list.reverse()
num = num + 1
lenlist.append(len(list))
maxlen = max(lenlist)
return max(1, maxlen)
else:
return 0
三、解题思路
PS:个人能力有限,不考虑时间空间最优。
找最长且不含有重复元素的字串长度,我的解法是从左往右依次遍历,每遍历一个字符就添加进入list中,然后判断当前的list列表中是否含有相同元素(这里采用set方法,通过判断列表长度是否相等判断是否含有相同元素):如果含有相同元素,则用一个lenlist列表记录当前最长子串长度(list长度-1),并且删除list中的首个元素直至list中不包含有重复字符;如果不含有相同元素,则用lenlist记录下当前list的长度。
最后从lenlist中找到最大的数值,即为最长子串的长度。