Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonで特定の文字がすべて連続して出現しているかどうかを判定する方法

文字列 s とある文字 c が与えられたとき、c のすべての出現箇所が文字列内で連続しているかどうかを判定します。なお、c が文字列に存在しない場合も True を返すものとします。

例えば、入力が s = "bbbbaaaaaaaccddd"c = 'a' の場合、文字 'a' はすべてひと続きに出現しているため、出力は True になります。

解法のアプローチ

この問題は、以下の手順で解くことができます。

  • フラグ flagFalse で初期化し、インデックス index を 0 に設定します。
  • 文字列の長さを n とします。
  • indexn 未満である間、以下を繰り返します。
    • string[index]c と一致した場合:
      • すでに flagTrue であれば、c の出現ブロックが2回目以降であることを意味するため、False を返します。
      • そうでなければ、c が続く限り index を進め、その後に flagTrue に設定します。
    • 一致しない場合は、単に 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 が一度も出現しない場合は flagFalse のままループを抜けるため、仕様どおり正しく True が返される点にも注目してください。

  1. Pythonで文字列内の文字がアルファベットかどうかを判定する方法

    Pythonでは、文字列クラス(str)が持つ isalpha() メソッドを使うことで、文字列がアルファベットのみで構成されているかどうかを簡単に確認できます。このメソッドは、単一の文字がアルファベットかどうかの判定にも利用できます。 特定の位置の文字がアルファベットかどうかを確認する たとえば、文字列の5番目の文字(インデックス4)がアルファベットかどうかを調べたい場合は、次のように記述します。 >>> s = Hello people >>> s[4].isalpha() True 文字列全体がアルファベットのみかどうかを確認する isalpha()

  2. Pythonで文字が大文字かどうかを判定する方法

    Pythonで文字が大文字かどうかを判定する最も簡単な方法は、isupper()メソッドを使うことです。このメソッドは、対象の文字が大文字であれば True を、そうでなければ False を返します。 isupper()メソッドの使用例 print(Z.isupper()) print(u.isupper()) 出力 True False Z は大文字のため True が返され、u は小文字のため False が返されます。isupper() は1文字だけでなく、文字列全体に対しても呼び出すことができ、その場合はすべての文字が大文字である場合にのみ True を返します。 範囲比較による判定