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

【Python】文字列を繰り返して別の文字列を作れるか判定する方法

2つの文字列 st が与えられたとします。このとき、s を何回連結すると t と同じ文字列を作れるかを求めます。s の繰り返しでは t を生成できない場合は -1 を返します。

例えば、入力が s = "tom"t = "tomtomtom" の場合、「tom」を3回連結すれば「tomtomtom」になるため、出力は 3 となります。

解法のアプローチ

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

  • t の長さが s の長さで割り切れない場合は、-1 を返す
  • cnt に「t の長さ ÷ s の長さ」の商を代入する
  • scnt 回繰り返して新しい文字列を作る
  • その結果が 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 の長さ)となり、非常に効率的です。

  1. Pythonファイルを別のPythonファイルから実行する3つの方法

    1つのPythonファイルから別のPythonファイルを実行したい場面はよくあります。実現方法は複数あり、それぞれ特徴が異なるため、用途に合わせて使い分けることが大切です。ここでは代表的な3つの方法を具体例とともに解説します。 1. モジュールとしてインポートする(最も推奨される方法) もっとも標準的で安全なのが、実行したいファイルをモジュールとして読み込み、その中の関数を呼び出す方法です。 例えば、fileB.pyをfileA.pyから利用したい場合を考えます。両方のファイルが同じディレクトリにあるなら、fileA.py内に次のように記述します。 import fileB これだけで、fil

  2. Pythonで部分文字列が文字列に含まれているか確認する方法(in演算子とfindメソッド)

    Pythonでは、ある文字列が別の文字列の部分文字列(サブストリング)として含まれているかどうかを簡単に確認できます。最も基本的な方法は、in 演算子を使うことです。in 演算子を使った判定方法in 演算子は、左辺の文字列が右辺の文字列に含まれている場合に True を、含まれていない場合に False を返します。以下はその使用例です。print(ello in hello world)実行結果:Trueこのように、ello は hello world の中に含まれているため、True が出力されます。find() メソッドで位置(インデックス)を取得する部分文字列が含まれているかどうかに加