Pythonで文章がパングラムかどうかを判定するプログラムの作成方法
小文字の英字のみで構成された文字列 s が与えられます。この文字列がパングラム(pangram)であるかどうかを判定するプログラムを作成しましょう。パングラムとは、英語アルファベットの26文字すべてを少なくとも1回含む文字列のことです。有名な例としては「The quick brown fox jumps over the lazy dog」が挙げられます。
たとえば、入力が s = "thegrumpywizardmakestoxicbrewfortheevilqueenandjack" の場合、a〜zのすべての文字が含まれているため、出力は True となります。
解決のアプローチ
この問題は、各文字の出現状況を記録し、最終的に26種類すべての文字が揃っているかを確認することで解決できます。手順は以下のとおりです。
新しい辞書(マップ)
dictbを作成します。文字列
s内の各文字iについて、その文字をキーとして出現回数をカウントします。ループ終了後、
dictbのサイズ(キーの種類数)が26と等しければTrueを返します。それ以外の場合は
Falseを返します。
それでは、実際の実装例を見て理解を深めましょう。
実装例
def solve(s):
dictb = {}
for i in s:
dictb[i] = dictb.get(i, 0) + 1
if len(dictb) == 26:
return True
return False
s = "thegrumpywizardmakestoxicbrewfortheevilqueenandjack"
print(solve(s))
入力
"thegrumpywizardmakestoxicbrewfortheevilqueenandjack"
出力
True
より簡潔な代替手法:set を使う方法
Pythonでは、集合(set)を活用することで、さらにシンプルにパングラム判定を実装できます。文字列をセットに変換すると重複が自動的に除去されるため、要素数が26かどうかを確認するだけで済みます。
def solve(s):
return len(set(s)) == 26
また、標準ライブラリの string.ascii_lowercase('abcdefghijklmnopqrstuvwxyz')との部分集合関係を利用する書き方も一般的です。
import string
def solve(s):
return set(string.ascii_lowercase) <= set(s)
まとめ
パングラムの判定は、辞書やセットを活用することで効率的に実装できます。いずれの方法でも計算量は文字列の長さを n とすると O(n) となり、非常に高速に動作します。条件分岐を減らしたい場合は set を使った一行実装がおすすめです。
-
文字列が空かどうかをチェックするPythonプログラム
この記事では、与えられた文字列が空であるかどうかを判定するための解決策とアプローチについて解説します。 問題文 文字列が入力として与えられたとき、その文字列が空(空文字列)であるかどうかを判定する必要があります。 Pythonの文字列はイミュータブル(変更不可)な性質を持っているため、文字列に対して何らかの操作を行う際には注意して扱う必要があります。 ここでは、上記の問題を解決するための2つのアプローチを紹介します。 len()メソッドを使用する方法 等価演算子(==)を使用する方法 アプローチ1:len()メソッドを使う方法 len()関数で文字列の長さを取得し、その長さが0であれば空文
-
Pythonで文字列がパングラムかどうかを判定するプログラムの作成方法
本記事では、与えられた文字列がパングラムであるかどうかを判定するPythonプログラムの解法とアプローチについて詳しく解説します。 問題の概要 文字列入力が与えられたとき、その文字列がパングラムであるかどうかを判定するPythonプログラムを作成します。 パングラムとは? パングラムとは、英語のアルファベット26文字すべてを少なくとも1回ずつ含む文章や一連の単語のことです。有名な例として「The quick brown fox jumps over the lazy dog」があります。 解法のアプローチ この問題は、以下の手順で解くことができます。 アルファベット全体を表す基準となる文字列