3.Longest Substring Without Repeating Characters === [題目](https://leetcode.com/problems/longest-substring-without-repeating-characters/) 這是抄的,這題有點難,這個解法不是甚麼演算法,不過卻也蠻漂亮的,我暫時找不到反例,先去研究另一個演算法 ```python= class Solution: def lengthOfLongestSubstring(self, s: str) -> int: d='' f='' for i in range(len(s)): if s[i] not in f: f+=s[i] else: #不像下面的要去判斷在不在字串中,因為他用了in if len(d)<len(f): d=f f=f[f.index(s[i])+1:]+s[i] return max(len(d),len(f)) ``` 這是看過別人solution後的另一個解法,其實概念上一樣 而且看過這個解法之後我更加地了解問題了 ```python= class Solution: def lengthOfLongestSubstring(self, s: str) -> int: max_forall=max_curr=start=0 dic={} for i,char in enumerate(s): if char in dic and dic[char]>=start: #如果有重複字元,且它的位置比開始位置更後面 #(這個也就代表,這個字元還在我們現在的子字串中) max_forall=max(max_forall,max_curr) max_curr=i-dic[char] start=dic[char]+1 else: max_curr+=1 dic[char]=i return max(max_forall,max_curr) ``` 因為問題在考慮,一個子字串,沒有任何重複的字元,所以在面對到重覆的,去比較forall跟curr誰大,這邊要去比較start因為它沒有用in不確定字元是否在子字串中, 總體來講,我覺得第一個code更直覺,可是會讓我少考慮一些我該考慮的,第二個才讓我更加明白 ###### tags: `LeetcodeMedium` `python`