Pythonで文字列配列の最長共通プレフィックスを求める方法
配列に複数の文字列が格納されている場合、それらの文字列に共通する最長共通プレフィックス(Longest Common Prefix)を見つける必要があります。ここでは、すべての文字列が小文字であると仮定します。また、共通のプレフィックスが存在しない場合は空文字列 "" を返すものとします。
例えば、文字列の配列が ["school", "schedule", "scotland"] のような場合、すべての文字列に共通して含まれているのは "sc" であるため、最長共通プレフィックスは "sc" となります。
解決のアプローチ
この問題を解くためには、以下の手順で処理を進めます。
- 最初の文字列を基準(current)として設定します。
- 配列内の残りの各文字列を取り出し、1文字ずつ順番に比較していきます。
- 基準となる文字列と比較対象の文字列の文字が一致すれば次の文字へ進み、一致しなければループを抜けます。
- ループを抜けた時点で、一致した部分までの部分文字列を新しい基準(current)として更新します。
この処理をすべての文字列に対して繰り返すことで、最終的に残った current が最長共通プレフィックスとなります。
Pythonでの実装例
それでは、実際のコード実装を見てみましょう。
class Solution(object):
def longestCommonPrefix(self, strs):
"""
:type strs: List[str]
:rtype: str
"""
if len(strs) == 0:
return ""
current = strs[0]
for i in range(1, len(strs)):
temp = ""
if len(current) == 0:
break
for j in range(len(strs[i])):
if j < len(current) and current[j] == strs[i][j]:
temp += current[j]
else:
break
current = temp
return current
input_list = ["school", "schedule", "scotland"]
ob1 = Solution()
print(ob1.longestCommonPrefix(input_list))
入力
["school", "schedule", "scotland"]
出力
"sc"
コードの解説
- 空配列のチェック: 配列が空の場合は即座に空文字列を返します。
- 初期化: 配列の最初の文字列を current として設定し、これを比較の基準とします。
- 早期終了: current が空になった時点で、共通プレフィックスが存在しないことが確定するため、ループを抜けて処理を終了します。
- 文字ごとの比較: 各文字列について先頭から1文字ずつ current と比較し、一致した文字だけを temp に追加していきます。
このアルゴリズムの計算量は、最悪の場合 O(S) となります(S は全文字列の文字数の合計)。文字列の数が多くても、共通プレフィックスが短い場合は早期に処理が終了するため、効率的に動作します。
-
Pythonで文字列内の最長の反復部分文字列を見つける方法
Pythonでは、collectionsモジュールのdefaultdictを使うことで、入力文字列の各位置から始まるすべての部分文字列の出現回数を効率的に集計できます。 ポイントとなるのはgetsubsメソッドです。これはジェネレータ関数として実装されており、呼び出されるたびに指定位置から始まる部分文字列を、完全な文字列から1文字ずつ短くしたものまで順番にyield(生成)していきます。 コード例 from collections import defaultdict def getsubs(loc, s): substr = s[loc:] i = -1 while
-
【初心者向け】Pythonで文字列の長さを取得する方法をわかりやすく解説
Pythonで文字列の長さを取得する基本:len()関数Pythonには、文字列やリスト、タプルといった複合オブジェクトの長さ(要素数)を取得できる組み込み関数 len() が用意されています。文字列の長さを知りたい場合は、対象の文字列をそのまま len() の引数として渡すだけでOKです。print(len(abcdefghijklmnopqrstuvwxyz))出力結果:26変数に格納した文字列の長さを取得する実際の開発では、変数に代入した文字列の長さを調べる場面が多いでしょう。次のように、変数を len() に渡すだけで簡単に取得できます。text = Hello, Python! pr