leetcode-125:検証文字列


LC検証文字列
  • 解題:
  • 方法一:スクリーニング+判断
  • 方法2:元の文字列で
  • を直接判断する

    タイトル
    タイトルリンクには文字列が指定されており、エコー列であるかどうかを検証し、アルファベットと数字文字のみを考慮し、アルファベットの大文字と小文字を無視することができます.説明:この問題では、空の文字列を有効な文字列として定義します.
    例1:
      : "A man, a plan, a canal: Panama"
      : true
    

    例2:
      : "race a car"
      : false
    

    問題を解く:
    方法一:選別+判断
    class Solution:
        def isPalindrome(self, s: str) -> bool:
            sgood = "".join(ch.lower() for ch in s if ch.isalnum())
            return sgood == sgood[::-1]
    
    

    方法2:元の文字列で直接判断する
    元の文字列ssに直接ダブルポインタを使用します.いずれかのポインタを移動する場合は、1つのアルファベットまたは数字文字、または2つのポインタが重なるまで、別のポインタの方向に移動する必要があります.すなわち,ポインタを次のアルファベット文字または数字文字に移動するたびに,この2つのポインタが指す文字が同じかどうかを判断する.
    class Solution:
        def isPalindrome(self, s: str) -> bool:
            n = len(s)
            left, right = 0, n - 1
            
            while left < right:
                while left < right and not s[left].isalnum():
                    left += 1
                while left < right and not s[right].isalnum():
                    right -= 1
                if left < right:
                    if s[left].lower() != s[right].lower():
                        return False
                    left, right = left + 1, right - 1
    
            return True
    

    これらの方法はいずれもisalnum()の方法を用いており,これを用いなければord()を用いてASCIIコードに変換し,chr()を用いてASCIIコードを文字に変換し,手動で小文字と数字に変換する必要がある.