Pythonで文字列の前半と後半が同じ文字セットを持つか確認する方法
Pythonでは、文字列を中央で分割し、前半と後半が同じ文字セット(含まれる文字の種類と個数)を持っているかどうかを確認できます。入力文字列の長さは偶数の場合もあれば奇数の場合もあります。文字数が偶数であれば、ちょうど半分の位置で2つの部分に分割します。文字数が奇数の場合は、中央の1文字を無視し、残りの前半と後半を比較します。
処理の流れ
判定は次の手順で行います。
- 文字列の長さを取得し、偶数か奇数かを判定する
- 奇数の場合は中央の文字を除外し、前半と後半に分割する
- それぞれの部分をリストに変換してソートする
- ソート後の2つのリストを比較し、完全に一致すれば「同じ文字セット」と判断する
サンプルコード
def comparehalves(input_string):
str_len = len(input_string)
# 文字数が奇数の場合は中央の文字を無視する
if str_len % 2 != 0:
left = input_string[:str_len // 2]
right = input_string[(str_len // 2) + 1:]
else:
left = input_string[:str_len // 2]
right = input_string[str_len // 2:]
# 前半と後半をそれぞれリストに変換してソート
l1 = sorted(left)
l2 = sorted(right)
if l1 == l2:
print("両方の半分に同じ文字が含まれています")
else:
print("両方の半分は異なる文字セットです")
in_string = input("文字列を入力してください: ")
comparehalves(in_string)
実行結果
上記のコードを実行すると、次のような結果が得られます。
# 実行例1 文字列を入力してください: Tutorials 両方の半分は異なる文字セットです # 実行例2 文字列を入力してください: TutTut 両方の半分に同じ文字が含まれています
コードのポイント
この方法のポイントは、文字の出現順序ではなく「どの文字が何個含まれているか」を比較している点です。各半分をリスト化してソートすれば、並び順に関係なく文字の構成が一致しているかどうかを簡単に判定できます。
なお、標準ライブラリの collections.Counter を使えば、ソートせずに各文字の出現回数を比較することも可能です。また、文字の重複を考慮しない場合は set() による集合比較でも同様の判定ができます。
-
Pythonで文字列がパングラムかどうかを判定するプログラムの作成方法
本記事では、与えられた文字列がパングラムであるかどうかを判定するPythonプログラムの解法とアプローチについて詳しく解説します。 問題の概要 文字列入力が与えられたとき、その文字列がパングラムであるかどうかを判定するPythonプログラムを作成します。 パングラムとは? パングラムとは、英語のアルファベット26文字すべてを少なくとも1回ずつ含む文章や一連の単語のことです。有名な例として「The quick brown fox jumps over the lazy dog」があります。 解法のアプローチ この問題は、以下の手順で解くことができます。 アルファベット全体を表す基準となる文字列
-
【Python】文字列がすべてユニークな文字で構成されているか判定する方法
本記事では、与えられた文字列に含まれる文字がすべて一意(ユニーク)であるかどうかを判定するPythonプログラムについて、その解法とアプローチをわかりやすく解説します。 問題の概要 文字列が入力として与えられたとき、その文字列に含まれるすべての文字が重複なく一意であるかどうかを判定します。たとえば「abcde」はすべて異なる文字で構成されているためTrue、「tutorialspoint」のように同じ文字が複数回出現する場合はFalseとなります。 アプローチ この問題は、以下のような手順で効率的に解くことができます。 ブール値の配列を用意する: 各インデックス i が「アルファベット(AS