题目内容
给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。
Given a string, find the length of the longest substring without repeating characters.
https://leetcode-cn.com/problems/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.
题目思路
流程就是从第一位开始读取字符串,如果没有出现过重复的,就在字典中记录这个字符串以及出现的位置。如果有重复的话,那么就更新字符串,从重复位置的下一位作为新的开始start,进行重新计算,直到遍历完整个字符串。
程序代码
class Solution(object):
def lengthOfLongestSubstring(self, s):
"""
:type s: str
:rtype: int
"""
if not s:
return 0
max_str,this_str=0,0#用来标记最大长度和当前的长度
site={}#用于存储字符的位置
start=0#开始的位置
for i in range(len(s)):
if s[i] not in site or site[s[i]]<start:
this_str+=1
site[s[i]]=i
else:
max_str=max(max_str,this_str)
start=site[s[i]]+1
this_str=i-site[s[i]]
site[s[i]]=i
return max(max_str,this_str)