それでは毛玉諸君、これにて失敬

日々の精進を備忘録的に綴ります。

leetcode日記3

寝起きが悪い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を辞書型で保持するやり方が紹介されていました。
解説がすごく丁寧でとても勉強になります。