Pythonで特定の文字がすべて連続して出現しているかどうかを判定する方法
文字列 s とある文字 c が与えられたとき、c のすべての出現箇所が文字列内で連続しているかどうかを判定します。なお、c が文字列に存在しない場合も True を返すものとします。
例えば、入力が s = "bbbbaaaaaaaccddd"、c = 'a' の場合、文字 'a' はすべてひと続きに出現しているため、出力は True になります。
解法のアプローチ
この問題は、以下の手順で解くことができます。
- フラグ
flagをFalseで初期化し、インデックスindexを 0 に設定します。 - 文字列の長さを
nとします。 indexがn未満である間、以下を繰り返します。string[index]がcと一致した場合:- すでに
flagがTrueであれば、cの出現ブロックが2回目以降であることを意味するため、Falseを返します。 - そうでなければ、
cが続く限りindexを進め、その後にflagをTrueに設定します。
- すでに
- 一致しない場合は、単に
indexを 1 進めます。
- ループが最後まで完了すれば、すべての出現が連続していたことになるため
Trueを返します。
それでは、実際の実装を見て理解を深めましょう。
実装例
def solve(string, c) :
flag = False
index = 0
n = len(string)
while index < n:
if string[index] == c:
if (flag == True) :
return False
while index < n and string[index] == c:
index += 1
flag = True
else :
index += 1
return True
s = "bbbbaaaaaaaccddd"
c = 'a'
print(solve(s, c))
入力
"bbbbaaaaaaaccddd", "a"
出力
True
コードのポイント
このアルゴリズムの計算量は O(n) であり、各文字を一度だけ走査すればよいため非常に効率的です。フラグ変数を使うことで、「c の出現ブロックが複数回現れたら False」という条件を簡潔に表現できます。また、c が一度も出現しない場合は flag が False のままループを抜けるため、仕様どおり正しく True が返される点にも注目してください。
-
Pythonで文字列内の文字がアルファベットかどうかを判定する方法
Pythonでは、文字列クラス(str)が持つ isalpha() メソッドを使うことで、文字列がアルファベットのみで構成されているかどうかを簡単に確認できます。このメソッドは、単一の文字がアルファベットかどうかの判定にも利用できます。 特定の位置の文字がアルファベットかどうかを確認する たとえば、文字列の5番目の文字(インデックス4)がアルファベットかどうかを調べたい場合は、次のように記述します。 >>> s = Hello people >>> s[4].isalpha() True 文字列全体がアルファベットのみかどうかを確認する isalpha()
-
Pythonで文字が大文字かどうかを判定する方法
Pythonで文字が大文字かどうかを判定する最も簡単な方法は、isupper()メソッドを使うことです。このメソッドは、対象の文字が大文字であれば True を、そうでなければ False を返します。 isupper()メソッドの使用例 print(Z.isupper()) print(u.isupper()) 出力 True False Z は大文字のため True が返され、u は小文字のため False が返されます。isupper() は1文字だけでなく、文字列全体に対しても呼び出すことができ、その場合はすべての文字が大文字である場合にのみ True を返します。 範囲比較による判定