🌊

よわよわエンジニアが解くLeetcode 125. Valid Palindrome

2024/03/16に公開

1つ目のアプローチ
英数字小文字に変換し、元の文字列と逆に並び替えた文字列を比較

''.join
文字列を区切りなしで結合する
cleand_s[::-1]
sequence[start:stop:step]

class Solution:
    def isPalindrome(self, s: str) -> bool:
        cleand_s = ''.join(c for c in s.lower() if c.isalnum())
        return cleand_s == cleand_s[::-1]

2つ目のアプローチ
文字列を左右から比較

left_index < right_index
例えば、",....,"のような入力があった場合、left_indexは5を超える前に内側のループと外側のループを抜ける。(While文はTrueの間は評価され続ける)

class Solution:
    def isPalindrome(self, s: str) -> bool:
        left_index, right_index = 0, len(s) -1
        while left_index < right_index:
            while (left_index < right_index) and (not s[left_index].isalnum()):
                left_index += 1
            while (left_index < right_index) and (not s[right_index].isalnum()):
                right_index -= 1
            if s[left_index].lower() != s[right_index].lower():
                return False
            left_index += 1
            right_index -= 1
        return True

Discussion