leetcode 686. 重复叠加字符串匹配
2018-09-11 本文已影响74人
文幕
题目
给定两个字符串 A 和 B, 寻找重复叠加字符串A的最小次数,使得字符串B成为叠加后的字符串A的子串,如果不存在则返回 -1。
举个例子,A = "abcd",B = "cdabcdab"。
答案为 3, 因为 A 重复叠加三遍后为 “abcdabcdabcd”,此时 B 是其子串;A 重复叠加两遍后为"abcdabcd",B 并不是其子串。
注意:
A 与 B 字符串的长度在1和10000区间范围内。
思路:
- 如果B中字符有不在A中的,返回-1
- 如果A的长度 < B的长度,那么B不可能是A的子串,需要先将A重复到长度 >= B
- 如果A的长度 >= B的长度,
2.1. 如果此时A包含B,,么返回之前A重复的次数
2.2. 如果此时A不包含B,那么将A再重复一次
2.2.1 如果此时A包含B,那么返回之前A重复的次数
2.2.2 如果此时A不包含B,那么返回-1
代码
class Solution:
def repeatedStringMatch(self, A, B):
"""
:type A: str
:type B: str
:rtype: int
"""
if not set(B).issubset(set(A)):
return -1
num = 1
S = A
while len(S) < len(B):
S += A
num += 1
if B in S:
return num
if B in S+A:
return num+1
return -1
结果
