Pythonで文字の出現頻度が文字列の長さの半分を超えているかどうかを確認する方法
ここでは、小文字・大文字・数字・特殊文字が混在する文字列 s が与えられたとき、いずれかの文字の出現頻度が文字列全体の長さの半分を超えているかどうかを判定する方法を解説します。
たとえば、入力が s = "CC*Ca5&CC" の場合を考えてみましょう。この文字列の長さは 9 であり、文字 'C' の出現回数は 5 回です。5 > 9/2 が成り立つため、出力は True になります。
解決のアプローチ
この問題は、次の手順で解決できます。
- まず、文字列
sの各文字の出現頻度を格納したマップ(freq)を作成します。 - freq 内の各文字
chについて以下を繰り返します。chの出現頻度がlen(s) // 2(文字列の長さの半分)より大きい場合は、Trueを返します。
- どの文字も条件を満たさなかった場合は、最後に
Falseを返します。
実装例
Pythonでは、標準ライブラリの collections.defaultdict を使うことで、文字ごとの出現回数を簡単に数えられます。以下が具体的な実装コードです。
from collections import defaultdict
def solve(s):
freq = defaultdict(int)
# 各文字の出現回数をカウント
for ch in s:
freq[ch] += 1
# 頻度が文字列長の半分を超える文字があるかチェック
for ch in freq:
if freq[ch] > len(s) // 2:
return True
return False
s = "CC*Ca5&CC"
print(solve(s))入力
"CC*Ca5&CC"
出力
True
コードのポイント
defaultdict(int) を使うと、存在しないキーにアクセスした際に自動的に初期値 0 が設定されるため、キーの存在チェックなしで頻度をインクリメントできます。また、計算量は文字列の長さを n とすると O(n) となり、非常に効率的です。
なお、条件判定に整数除算 // を使用している点にも注目してください。これにより、文字列の長さが奇数の場合でも正しく「半分より大きいか」を判定できます。
-
Pythonで文字列がパングラムかどうかを判定するプログラムの作成方法
本記事では、与えられた文字列がパングラムであるかどうかを判定するPythonプログラムの解法とアプローチについて詳しく解説します。 問題の概要 文字列入力が与えられたとき、その文字列がパングラムであるかどうかを判定するPythonプログラムを作成します。 パングラムとは? パングラムとは、英語のアルファベット26文字すべてを少なくとも1回ずつ含む文章や一連の単語のことです。有名な例として「The quick brown fox jumps over the lazy dog」があります。 解法のアプローチ この問題は、以下の手順で解くことができます。 アルファベット全体を表す基準となる文字列
-
【初心者向け】Pythonで文字列の長さを取得する方法をわかりやすく解説
Pythonで文字列の長さを取得する基本:len()関数Pythonには、文字列やリスト、タプルといった複合オブジェクトの長さ(要素数)を取得できる組み込み関数 len() が用意されています。文字列の長さを知りたい場合は、対象の文字列をそのまま len() の引数として渡すだけでOKです。print(len(abcdefghijklmnopqrstuvwxyz))出力結果:26変数に格納した文字列の長さを取得する実際の開発では、変数に代入した文字列の長さを調べる場面が多いでしょう。次のように、変数を len() に渡すだけで簡単に取得できます。text = Hello, Python! pr