Pythonで同じ文字が連続する最長部分文字列の長さを求めるプログラム
この記事では、Pythonを使って「同じ文字が連続している最長の部分文字列の長さ」を求める方法を解説します。
例えば、入力が "abbbaccabbbba" の場合、b が4つ連続して並んでいる箇所があるため、出力は 4 となります。
解法のアプローチ
この問題は、文字列を先頭から順番に走査し、隣接する2つの文字を比較することで解決できます。具体的な手順は以下のとおりです。
- 文字列 s の長さが 0 の場合は、そのまま 0 を返します。
- s の末尾に空白文字を1つ追加します。これは、ループ処理の際に文字列の最後にある連続グループも確実に確定させるためのテクニックです。
- カウンター
ctと一時変数temをそれぞれ 1 で初期化します。 - i を 0 から s の長さ - 2 まで繰り返し処理を行います。
s[i]とs[i+1]が同じ文字の場合:temを 1 増やします。- 異なる文字の場合:
ctにtemとctのうち大きい方を代入し、temを 1 にリセットします。
- 最後に
ctを返します。
実装例
class Solution:
def solve(self, s):
if len(s)==0:
return 0
s+=' '
ct=1
tem=1
for i in range(len(s)-1):
if s[i]==s[i+1]:
tem+=1
else:
ct=max(tem,ct)
tem=1
return ct
ob = Solution()
print(ob.solve("abbbaccabbbba"))
入力
"abbbaccabbbba"
出力
4
コードのポイント
末尾への空白追加: 文字列の最後にダミー文字(空白)を追加することで、「現在の連続カウントを確定する」という処理を特別な条件分岐なしで実現できます。これにより、ループ内のコードがシンプルになり、バグも発生しにくくなります。
計算量: このアルゴリズムは文字列を1回だけ走査するため、時間計算量は O(n)、空間計算量は O(1) となり、非常に効率的です。長い文字列に対しても高速に動作します。
-
Pythonで最長連続シーケンスの長さを求めるアルゴリズムと実装方法
問題概要ソートされていない数値の配列が与えられたとき、その中から連続する要素で構成される最長シーケンスの長さを見つける問題を考えてみましょう。ここでいう「連続」とは、値が1ずつ増えていく数列(例:4, 5, 6, 7)のことを指します。例えば、入力が nums = [70, 7, 50, 4, 6, 5] の場合、最も長い連続シーケンスは [4, 5, 6, 7] となるため、答えは 4 になります。解法のアプローチこの問題は、以下の手順で効率的に解くことができます。まず、配列をセット(set)に変換して重複を除去します。これにより、要素の存在確認が O(1) で行えるようになります。各要素
-
Pythonで文字列内のミラー文字を検索する方法【初心者向け解説】
ユーザーが入力した文字列と位置(ポジション)が与えられたとき、その位置から文字列の末尾までの文字を、アルファベット順を反転させた「ミラー文字」に変換するプログラムを作成します。この操作では、「a」→「z」、「b」→「y」、「c」→「x」、「d」→「w」のように、アルファベットの最初の文字が最後の文字に対応する形で置き換えを行います。 入力: p = 3 入力文字列 = python 出力: pygslm 上記の例では、3番目の位置以降の文字「t」「h」「o」「n」が、それぞれ逆順のアルファベット「g」「s」「l」「m」に変換されていることがわかります。先頭から指定位置までは元の文字列