686.重複重複文字列マッチング(Python)
1114 ワード
タイトル
難易度:★☆☆☆タイプ:文字列
2つの文字列AおよびBが与えられ、重複する重複する文字列Aの最小回数が、文字列Bが重複する文字列Aのサブ列となり、存在しない場合は−1が返される.
例えば、A=「abcd」、B=「cdabcdab」である.
答えは3で、Aが3回繰り返して「abcdabcdabcd」になったため、Bはそのサブ列である.Aは2回繰り返して「abcdabcd」となり、Bはそのサブ列ではない.
に注意
AとB文字列の長さは1と10000区間の範囲内である.
に答える
A_repeatはAがr回コピーした文字列を表し,1から徐々にrを大きくし,いつBがA_にできるかを調べる.repeat中.
パス履歴のポイントは、作成された文字列の最大長さが2*len(A)+len(B)を超えてはならないことに注意してください.どうしてこの数字を選んだのですか.
次のことを考慮します.文字列Aが文字列Bより長い場合:(1)文字列Aはもともと文字列Bを含んでいるが、このときAは一度コピーするだけで見つかり、最大長はlen(A);(2)文字列Aは、文字Bを含むものを一度コピーする.この場合、Aの繰り返し回数は2であり、遍歴制御範囲はlen(A)2である.(3)文字列Aを1回コピーして文字Bを含まないと、何回コピーしても文字Bを含まないので、制御長はlen(A)2でよい. 文字列Aが文字列Bより短い場合、文字列Aを文字列Bよりちょうど大きい長さにコピーし、len(B)より小さくない長さに制御するとループから飛び出します. 以上の場合は最大値をとり、和を求めればよい:len(A)*2+len(B).
質問やアドバイスがあれば、コメントエリアへようこそ~
難易度:★☆☆☆タイプ:文字列
2つの文字列AおよびBが与えられ、重複する重複する文字列Aの最小回数が、文字列Bが重複する文字列Aのサブ列となり、存在しない場合は−1が返される.
例えば、A=「abcd」、B=「cdabcdab」である.
答えは3で、Aが3回繰り返して「abcdabcdabcd」になったため、Bはそのサブ列である.Aは2回繰り返して「abcdabcd」となり、Bはそのサブ列ではない.
に注意
AとB文字列の長さは1と10000区間の範囲内である.
に答える
A_repeatはAがr回コピーした文字列を表し,1から徐々にrを大きくし,いつBがA_にできるかを調べる.repeat中.
パス履歴のポイントは、作成された文字列の最大長さが2*len(A)+len(B)を超えてはならないことに注意してください.どうしてこの数字を選んだのですか.
次のことを考慮します.
class Solution:
def repeatedStringMatch(self, A: str, B: str) -> int:
A_repeat, r = A, 1
while len(A_repeat) < 2 * len(A) + len(B):
if B in A_repeat:
return r
A_repeat, r = A_repeat + A, r + 1
return -1
質問やアドバイスがあれば、コメントエリアへようこそ~