Pythonで回文判定をする方法:How to do palindrome determination in Python
Pythonでの回文判定について
回文は、前から読んでも後ろから読んでも同じになる文字列を指します。Pythonでは簡単に回文を判定することができます。
1. 基本的な回文判定
Pythonでは、スライスを使うことで文字列を逆順にすることができます。これを利用して回文を判定する方法は以下の通りです。
def is_palindrome(s): return s == s[::-1] # 使用例 print(is_palindrome("radar")) # True print(is_palindrome("hello")) # False
2. 大文字・小文字やスペースを無視した回文判定
入力文字列に大文字と小文字が混在していたり、スペースが含まれている場合でも回文と判定するようにするには、事前に正規化が必要です。
def is_palindrome_normalized(s): normalized = ''.join(c.lower() for c in s if c.isalnum()) return normalized == normalized[::-1] # 使用例 print(is_palindrome_normalized("A man a plan a canal Panama")) # True print(is_palindrome_normalized("Hello World")) # False
3. 再帰を用いた回文判定
再帰を使って回文を判定する方法もあります。以下のコードでは、文字列の両端を比較し、真ん中に到達するまで再帰的に呼び出します。
def is_palindrome_recursive(s): s = ''.join(c.lower() for c in s if c.isalnum()) if len(s) <= 1: return True if s[0] != s[-1]: return False return is_palindrome_recursive(s[1:-1]) # 使用例 print(is_palindrome_recursive("radar")) # True print(is_palindrome_recursive("Python")) # False
4. データ構造を使った回文判定
データ構造のスタックやキューを使って回文判定を行う方法もあります。
from collections import deque def is_palindrome_deque(s): s = ''.join(c.lower() for c in s if c.isalnum()) dq = deque(s) while len(dq) > 1: if dq.popleft() != dq.pop(): return False return True # 使用例 print(is_palindrome_deque("racecar")) # True print(is_palindrome_deque("python")) # False
まとめ
Pythonでは、以下の方法で回文を判定することができます:
- スライスを使った基本的な方法
- 正規化を含む方法
- 再帰を使った方法
- データ構造(スタックやキュー)を使った方法
用途や条件に応じて適切な方法を選択してください。