给定一个字符串 s ,请你找出其中不含有重复字符的 最长
子串的长度。
示例 1:
输入: s = “abcabcbb”
输出: 3
解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。
示例 2:
输入: s = “bbbbb”
输出: 1
解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。
示例 3:
输入: s = “pwwkew”
输出: 3
解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。
请注意,你的答案必须是 子串 的长度,“pwke” 是一个子序列,不是子串。
提示:
0 <= s.length <= 5 * 104
s 由英文字母、数字、符号和空格组成
二、解法
1.遍历字符串,定义变量接收当前找到最长的无重复字符串
2.定义临时变量,接收当前查找的下标字符拼接值
3.循环中判断:当字符不存在临时变量时,说明还未遇到重复字符,拼接到临时变量
4.当字符在临时变量中出现过,那么就说明当前计算已经是该片段下无重复值
5.判断该片段下的无重复值是否大于定义的最长字符串长度值。如果大于,则重新赋值,且初始化临时变量。临时变量初始化值下标从临时变量中首次出现字符的位置,再追加拼接当前字符
def lengthOfLongSetSubString(s :str):
max_len=0
temp_str=''
for index,value in enumerate(s):
if value in temp_str:
max_len=max(len(temp_str),max_len)
temp_str=temp_str[temp_str.find(value)+1:]+value
else:
temp_str+=value
return max(max_len,len(temp_str))
print(lengthOfLongSetSubString('aaba'))