Pythonでのラピンドローム(Lapindrome)の文字列判定方法


Pythonで文字列がラピンドロームかどうかを判定する方法はいくつかあります。以下にいくつかの方法を示します。

方法1: スライスを使用して比較する方法

def is_lapindrome(string):
    length = len(string)
    mid = length // 2
    if length % 2 == 0:
        first_half = sorted(string[:mid])
        second_half = sorted(string[mid:])
    else:
        first_half = sorted(string[:mid])
        second_half = sorted(string[mid + 1:])
    return first_half == second_half
# 使用例
print(is_lapindrome("abcde"))  # False
print(is_lapindrome("abccba"))  # True

方法2: 辞書を使用して文字の出現回数を比較する方法

from collections import Counter
def is_lapindrome(string):
    length = len(string)
    mid = length // 2
    if length % 2 == 0:
        first_half = Counter(string[:mid])
        second_half = Counter(string[mid:])
    else:
        first_half = Counter(string[:mid])
        second_half = Counter(string[mid + 1:])
    return first_half == second_half
# 使用例
print(is_lapindrome("abcde"))  # False
print(is_lapindrome("abccba"))  # True

方法3: ループを使用して比較する方法

def is_lapindrome(string):
    length = len(string)
    mid = length // 2
    if length % 2 == 0:
        first_half = {}
        second_half = {}
        for i in range(mid):
            first_half[string[i]] = first_half.get(string[i], 0) + 1
            second_half[string[mid + i]] = second_half.get(string[mid + i], 0) + 1
    else:
        first_half = {}
        second_half = {}
        for i in range(mid):
            first_half[string[i]] = first_half.get(string[i], 0) + 1
            second_half[string[mid + 1 + i]] = second_half.get(string[mid + 1 + i], 0) + 1
    return first_half == second_half
# 使用例
print(is_lapindrome("abcde"))  # False
print(is_lapindrome("abccba"))  # True

上記のコード例では、与えられた文字列がラピンドロームであるかどうかを判定するための3つの方法を示しました。いずれの方法も、文字列を前半と後半に分割し、それぞれの部分を比較することで判定しています。スライス、辞書、ループを使用して実装しています。これらの方法はいずれも効率的であり、与えられた文字列がラピンドロームであるかどうかを正確に判定できます。

これらのコード例を参考にして、ラピンドロームの文字列判定に役立てていただければ幸いです。