Pythonで文字列内の各文字の出現回数が素数かどうかを判定する方法
文字列 s が与えられたとき、s に含まれる各文字の出現回数がすべて素数であるかどうかを判定します。
たとえば、入力が s = "apuuppa" の場合を見てみましょう。この文字列には 'a' が 2 個、'p' が 3 個、'u' が 2 個含まれています。2 も 3 も素数であるため、出力は True になります。
解決のアプローチ
この問題は、次の手順で解くことができます。
- 頻度マップの作成: 各文字とその出現回数を対応付けたマップ(辞書)を作成します。
- 素数判定: マップ内の各文字について、出現回数が 0 より大きく、かつ素数でない場合は
Falseを返します。 - 結果の返却: すべての文字の出現回数が素数であれば
Trueを返します。
それでは、理解を深めるために実際の実装例を見ていきましょう。
サンプルコード
from collections import defaultdict
def isPrime(num):
if num > 1:
for i in range(2, num):
if num % i == 0:
return False
return True
return False
def solve(s):
freq = defaultdict(int)
for i in range(len(s)):
freq[s[i]] += 1
for char in freq:
if freq[char] > 0 and isPrime(freq[char]) == False:
return False
return True
s = "apuuppa"
print(solve(s))
コードの解説
isPrime(num): 引数numが素数かどうかを判定する関数です。1 以下の数値は素数ではないためFalseを返し、2 からnum - 1までの整数で割り切れるものが存在すれば素数ではないと判断します。solve(s):defaultdict(int)を使うことで、まだキーが存在しない文字に対しても自動的に初期値 0 が設定され、各文字の出現回数を簡潔にカウントできます。その後、すべての文字についてisPrime()による判定を行い、1 つでも素数でない出現回数があればFalseを返します。
実行結果
入力
"apuuppa"
出力
True
-
Pythonで数値が二面素数(Dihedral Prime)かどうかを判定する方法
ある整数nが与えられたとき、それが「二面素数(dihedral prime)」であるかどうかを判定する方法を解説します。二面素数とは、その数自体が素数であり、さらに7セグメントディスプレイに表示した際に、表示の向き(通常の向きでも上下逆さまでも)に関わらず、同じ数または別の素数として読み取れる数のことです。例えば、入力がn = 1181の場合、出力はTrueになります。下の数字は上の数字を上下逆さま(180度回転)にして表示したものであり、どちらも素数となっています。アルゴリズムの手順この問題を解くために、以下の手順で進めます。up_side_down() 関数を定義します。引数としてnを受け
-
Pythonで文字列内の各文字の出現頻度がすべて異なるかどうかを確認する方法
この記事では、Pythonを使って与えられた文字列の中に含まれる各文字の出現頻度(カウント)を求める方法を解説します。さらに、その頻度の中に同じ値を持つ文字が2つ以上存在するかどうか、つまり「すべての文字の頻度が互いに異なっているか」どうかを判定する方法まで紹介します。処理は大きく2つのステップに分けて行います。まず最初のプログラムでは、単純に各文字の頻度を数えるところから始めましょう。ステップ1:各文字の出現頻度を数えるここでは、入力された文字列に含まれる各文字の出現回数を調べます。まず空の辞書(dict)を用意し、文字列を1文字ずつ走査しながら、その文字がすでに辞書のキーとして存在する場合