Pythonで回文判定をする方法:How to do palindrome determination in Python

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では、以下の方法で回文を判定することができます:

  • スライスを使った基本的な方法
  • 正規化を含む方法
  • 再帰を使った方法
  • データ構造(スタックやキュー)を使った方法

用途や条件に応じて適切な方法を選択してください。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です