Pythonで回文かどうかを判定する方法を教えてください

回文である文字列を判定する方法は数多くあるが、ここではその中でもよく使われる方法の一つを示す。

  1. 2つのポインタ法を使用する
  1. 文字列の先頭を指すポインタと末尾を指すポインタを2つ初期化する
  2. ポインタが指す文字を順番に比較し、一致しない場合は回文ではないので、False を返します。
  3. 2 つのポインタが指す文字が一致すれば、両方のポインタを中央に向けて移動させ続け、2 つのポインタが出会うか越えるまで比較し続けます。
  4. もし二つのポインタが出会ったり交差したりしたら、その文字列は回文なので、Trueを返す。

配列における回文判定に両端のポインタを利用したPythonコード例は以下のとおりです:

def is_palindrome(s):
    # 去除字符串中的非字母和数字字符,并转换为小写
    s = ''.join(e for e in s if e.isalnum()).lower()
    left, right = 0, len(s) - 1
    while left < right:
        if s[left] != s[right]:
            return False
        left += 1
        right -= 1
    return True

サンプルの使用:

s = input("请输入一个字符串: ")
if is_palindrome(s):
    print("是回文")
else:
    print("不是回文")

このメソッドは、文字列の中の空白と句読点を無視し、大文字と小文字を区別しません。

bannerAds