寝起きが悪いko_ya346です。
leetcode3日目!
lengthOfLongestSubstring
与えられた文字列中から、連続するユニークな最大の文字列を見つける問題。
自分の解法としては
- 左端、右端それぞれ変数に持つ(l, r)
- s[l:r]がユニークな文字で構成されているか判定
- ユニークならansを更新、rに1足す
- ユニークでなければlに1足す
- rが文字列の最後に到達したら終了
class Solution: def lengthOfLongestSubstring(self, s: str) -> int: l = 0 r = 1 ans = 0 while r <= len(s): if len(set(s[l:r])) != r - l: l += 1 continue ans = max(ans, r - l) r += 1 return ans
ざっくりこんな感じでAccepted
↑の4番目の処理ですが、例えば
addf
という文字の場合、l = 0, r = 2のとき重複が発生しますが、
lに1足しても重複します。
この省く方法が模範解答3で紹介されており、文字のindexを辞書型で保持するやり方が紹介されていました。
解説がすごく丁寧でとても勉強になります。