Pythonで一方の文字列の最頻文字が他方の文字列に同じ回数現れるかどうかを確認する方法
2つの文字列 s と t が与えられたとき、s の中で最も多く出現する文字(最頻文字)を取り出し、その文字が t にも同じ回数だけ含まれているかどうかを判定する問題について解説します。
例えば、s = "crosssection"、t = "securesystem" という入力の場合、s の最頻文字は「s」です。そして t の中にも「s」は同じ回数(4回)出現するため、出力は True になります。
解法のアプローチ
この問題を解くには、以下の手順に従います。
- s の各文字とその出現回数を記録したマップ(freq)を作成する
- freq の中で出現回数が最大の文字(max_freq_char)を求める
- その文字の出現回数(max_freq)を取得する
- t における max_freq_char の出現回数が max_freq と一致する場合は True を返す
- それ以外の場合は False を返す
実装例
以下のPythonコードで実際の実装を確認してみましょう。
from collections import defaultdict
def solve(s, t):
freq = defaultdict(int)
for char in s:
freq[char] += 1
max_freq_char = max(freq, key=freq.get)
max_freq = freq[max_freq_char]
if max_freq == t.count(max_freq_char):
return True
return False
s = "crosssection"
t = "securesystem"
print(solve(s, t))
入力
"crosssection", "securesystem"
出力
True
コードの解説
このコードの動作を順番に見ていきましょう。
- 頻度カウント:
defaultdict(int)を使うことで、まだ存在しないキーにアクセスした際に自動的に 0 で初期化されます。これにより、s の各文字の出現回数を簡潔に数えることができます。 - 最頻文字の取得:
max(freq, key=freq.get)により、値(出現回数)が最大となるキー(文字)を効率よく取得できます。 - 回数の比較: 文字列の
count()メソッドで t 内における該当文字の出現回数を調べ、max_freq と一致するかどうかを判定します。
このアルゴリズムの計算量は、文字列の長さを n とすると O(n) であり、非常に効率的です。文字列処理やデータ分析など、頻度の比較が必要なさまざまな場面で応用できる基本的なテクニックなので、ぜひ覚えておきましょう。
-
【Python】二分木が別の木の部分木(サブツリー)かどうかを判定する方法
はじめにプログラミングにおいて、ある二分木が別の二分木の部分木(サブツリー)であるかどうかを判定する処理は、よく登場する基本的な課題の一つです。この記事では、Pythonを使ってこの問題を効率的に解く方法を、具体的なコード例とともにわかりやすく解説します。問題の概要2つの二分木が与えられたとき、「2つ目の木が1つ目の木の部分木になっているか」を確認します。たとえば、次のような入力があった場合:この場合、root2(値4を根とする木)は root1 の中にそのまま含まれているため、出力は True になります。解法のアプローチこの問題は再帰(recursion)を使うことでシンプルに解けます。判
-
Pythonで文字列から最大のアルファベット文字を取得する方法
Pythonでは、組み込み関数 max() を文字列に適用するだけで、文字列の中から最大のアルファベット文字を簡単に取得できます。文字列に max() を使用すると、各文字がUnicodeコードポイントの順序に従って比較され、その中で最も大きな文字が返されます。具体的には、以下のように記述します。 max(stripedzebra) z最初の例では、helloworld に含まれる各文字(h、e、l、o、w、r、d)の中で w が最も大きい文字であるため、結果として w が返されます。同様に、2番目の例では stripedzebra に含まれる文字の中で z が最大となるため、z が出力されま