Pythonで回文かどうかを判定する方法を教えてください
回文である文字列を判定する方法は数多くあるが、ここではその中でもよく使われる方法の一つを示す。
- 2つのポインタ法を使用する
- 文字列の先頭を指すポインタと末尾を指すポインタを2つ初期化する
- ポインタが指す文字を順番に比較し、一致しない場合は回文ではないので、False を返します。
- 2 つのポインタが指す文字が一致すれば、両方のポインタを中央に向けて移動させ続け、2 つのポインタが出会うか越えるまで比較し続けます。
- もし二つのポインタが出会ったり交差したりしたら、その文字列は回文なので、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("不是回文")
このメソッドは、文字列の中の空白と句読点を無視し、大文字と小文字を区別しません。