Pythonで2つの文字列がアナグラムかどうかを判定する方法
はじめに
2つの文字列 s と t が与えられたとき、それらが互いのアナグラム(同じ文字を並べ替えて作られる関係)であるかどうかを判定する方法を解説します。
例えば、s = "bite"、t = "biet" という入力の場合、両方とも同じ文字で構成されているため、出力は True になります。
解決の手順
この問題は以下のステップで解決できます。
- まず、s と t の文字数が一致しているか確認します。一致していなければ、その時点で False を返します。
- 次に、s と t のそれぞれの文字をソートします。
- 最後に、ソート後の s と t が完全に一致すれば True、そうでなければ False を返します。
実装例
以下のコードを見ると、処理の流れがより理解しやすくなります。
def solve(s, t):
if len(s) != len(t):
return False
s = sorted(s)
t = sorted(t)
return s == t
s = "bite"
t = "biet"
print(solve(s, t))入力
"bite", "biet"
出力
True
補足:計算量について
この方法では、文字列のソートが必要なため、時間計算量は O(n log n) となります。より効率的にしたい場合は、Collections.Counter を使って各文字の出現回数を比較する方法もあり、この場合は O(n) の時間計算量で判定できます。
from collections import Counter
def solve(s, t):
return Counter(s) == Counter(t)どちらの方法でも正しくアナグラムを判定できますが、入力サイズが大きい場合は Counter を使った方法が有利です。
-
Pythonで、ある円が2つの同心円の境界内に収まっているかどうかを判定する方法
半径 r1 と r2 を持つ2つの同心円があるとします。そこに、中心座標 coord と半径 r を持つもう1つの円を加えます。今回の課題は、この新しい円が、与えられた2つの同心円の間の境界領域内に完全に収まっているかどうかを判定することです。 たとえば、入力が r1 = 4、r2 = 2、coord = (3, 0)、r = 1 の場合、出力は True になります。 解法のアプローチ この問題は、点から原点までの距離を求める幾何学的な計算を使えば、シンプルに解決できます。手順は以下のとおりです。 まず、円の中心 (x, y) から原点までの距離 val を計算します。つまり、val =
-
【Python】2つの数値の2進表現がアナグラムかどうかを判定するプログラム
2つの数値が与えられたとき、その2進表現同士がアナグラム(同じ文字を並べ替えたもの)になっているかどうかを判定します。Pythonでは、collectionsモジュールのCounterクラスと辞書の比較を組み合わせることで、この問題をシンプルかつ効率的に解くことができます。 実行例 入力: a = 8, b = 16 出力: Yes 両方の数値の2進表現は、0と1の個数が同一です。 アルゴリズム ステップ1 : 2つの数値を受け取ります。 ステップ2 : bin()関数で各数値を2進数の文字列に変換し、接頭辞「0b」に相当する先頭2文字を取り除きます。 ステップ3 : 2つの2進表現は