【Python】文字列を繰り返して別の文字列を作れるか判定する方法
2つの文字列 s と t が与えられたとします。このとき、s を何回連結すると t と同じ文字列を作れるかを求めます。s の繰り返しでは t を生成できない場合は -1 を返します。
例えば、入力が s = "tom"、t = "tomtomtom" の場合、「tom」を3回連結すれば「tomtomtom」になるため、出力は 3 となります。
解法のアプローチ
この問題は以下の手順で解くことができます。
tの長さがsの長さで割り切れない場合は、-1 を返すcntに「tの長さ ÷sの長さ」の商を代入するsをcnt回繰り返して新しい文字列を作る- その結果が
tと一致する場合はcntを返す - 一致しない場合は -1 を返す
実装例
それでは、実際のコードを見てみましょう。
def solve(s, t):
# t の長さが s の長さで割り切れないかチェック
if(len(t) % len(s) != 0):
return -1
# 繰り返し回数を計算
cnt = int(len(t) / len(s))
# s を cnt 回繰り返す
s = s * cnt
# 結果が t と一致するか確認
if(s == t):
return cnt
return -1
s = "tom"
t = "tomtomtom"
print(solve(s, t))入力
"tom", "tomtomtom"
出力
3
コードのポイント
このアルゴリズムのポイントは以下の通りです。
- 事前チェックによる高速化: 長さの割り算で割り切れない場合、その時点で -1 を返せるため、無駄な処理を省けます。
- シンプルな比較: Python の文字列乗算(
s * cnt)を使うことで、繰り返し処理を1行で簡潔に書けます。
計算量は O(n)(n は文字列 t の長さ)となり、非常に効率的です。
-
Pythonファイルを別のPythonファイルから実行する3つの方法
1つのPythonファイルから別のPythonファイルを実行したい場面はよくあります。実現方法は複数あり、それぞれ特徴が異なるため、用途に合わせて使い分けることが大切です。ここでは代表的な3つの方法を具体例とともに解説します。 1. モジュールとしてインポートする(最も推奨される方法) もっとも標準的で安全なのが、実行したいファイルをモジュールとして読み込み、その中の関数を呼び出す方法です。 例えば、fileB.pyをfileA.pyから利用したい場合を考えます。両方のファイルが同じディレクトリにあるなら、fileA.py内に次のように記述します。 import fileB これだけで、fil
-
Pythonで部分文字列が文字列に含まれているか確認する方法(in演算子とfindメソッド)
Pythonでは、ある文字列が別の文字列の部分文字列(サブストリング)として含まれているかどうかを簡単に確認できます。最も基本的な方法は、in 演算子を使うことです。in 演算子を使った判定方法in 演算子は、左辺の文字列が右辺の文字列に含まれている場合に True を、含まれていない場合に False を返します。以下はその使用例です。print(ello in hello world)実行結果:Trueこのように、ello は hello world の中に含まれているため、True が出力されます。find() メソッドで位置(インデックス)を取得する部分文字列が含まれているかどうかに加