题目:
请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。
【注意:子字符串 != 子序列,如"pwwkew"中,最长字串是"wke",“pwke” 是一个子序列,不是子串】
leetcode原题链接
思路:
- 初始状态:左指针left=0,右指针right=0
- 终止条件:①右指针right遍历完字符串s
- 进入while循环
while循环的条件是while(right!=len(s)-1)
,子字符串的右指针到 字符串最右,此时字符串已遍历完。- right+=1,如果string[left:right+1]有重复字符,则left+=1,直至无重复
- 出while循环,return max_len=max(max_len,right-left+1)
代码:
class Solution:
def lengthOfLongestSubstring(self, s: str) -> int:
if len(s)==0:
return 0
if len(s)==1:
return 1
left,right=0,0
max_len=0
while(right!=len(s)-1):
right+=1
for i in s[left:right+1]:#判断子字符串中是否有 重复字符
if s[left:right+1].count(i)>1:#若有
left+=1#left左移一位,直至无重复字符,才会运行下一行代码
max_len=max(max_len,right-left+1)#遍历过的【无重复子字符串】中len最大的值 和 当前正在遍历的【无重复字符串】的len值比较,取max
return max_len#字符串s遍历完成,返回max_len
两个if语句,是因leetcode的两个特殊测试用例而增设
待优化