3.无重复字符的最长子串
题目描述
给定一个字符串,找出不含有重复字符的最长子串的长度。
示例 1:
输入: "abcabcbb" 输出: 3 解释: 无重复字符的最长子串是 "abc",其长度为 3。
示例 2:
输入: "bbbbb" 输出: 1 解释: 无重复字符的最长子串是 "b",其长度为 1。
示例 3:
输入: "pwwkew" 输出: 3 解释: 无重复字符的最长子串是 "wke",其长度为 3。请注意,答案必须是一个子串,"pwke"是一个子序列 而不是子串。
解题思路
新建两个字符串一个存放当前结果curr,一个存放目前的所有结果中最优结果res。每次读取字符串s中的一个字符判断curr字符串中是否存在,不存在则放入。存在则去判断当前curr的字符串是否比res字符串大,大则更新res,否则不动。然后我们根据这个重复的字符找到在curr中的位置,我们以下一个位置为起点开始保存curr字符串。要注意的是当读取到s的最后一个字符时,我们要把curr和res做一次比较。
Python代码如下
class Solution:
def lengthOfLongestSubstring(self, s):
"""
:type s: str
:rtype: int
"""
if len(s) <= 1:
return len(s)
res = ''
curr = ''
for i in range(len(s)):
if s[i] not in curr:
curr += s[i]
if i == len(s) - 1:
if len(curr) > len(res):
res = curr
else:
if len(curr) > len(res):
res = curr
a = curr.index(s[i])
curr = curr[a+1:]
curr += s[i]
return len(res)