1. 程式人生 > >686. Repeated String Match

686. Repeated String Match

imu pos substr 找到 兩個 minimum 子字符串 color fin

Given two strings A and B, find the minimum number of times A has to be repeated such that B is a substring of it. If no such solution, return -1.

For example, with A = "abcd" and B = "cdabcdab". Return 3, because by repeating A three times (“abcdabcdabcd”), B is a substring of it; and B is not a substring of A repeated two times ("abcdabcd").

給定兩個字符串A和B,找到A必須重復的最小次數,使得B是它的一個子字符串。如果沒有這樣的解決方案,返回-1。

例如,用A =“abcd”和B =“cdabcdab”。返回3,因為通過重復三次(“abcdabcdabcd”),B是它的一個子串; 而B不是重復兩次的子串(“abcdabcd”)。

(1)思想1:因為要使得A包含B,所以當A的長度小於B的時候,就不斷的疊加重復,直到A的長度大於等於B,並且計數。此時用find來查找,找見返回con,否則,再進行一次的復制,復制之後同樣判斷是否包含,包含則返回con+1;否則,未找到返回-1。

C++代碼:

 1 class Solution {
2 public: 3 int repeatedStringMatch(string A, string B) { 4 int len_A=A.size(),len_B=B.size(); 5 string t=A; 6 int con=1; 7 while(t.size()<len_B) 8 { 9 t=t+A; 10 con++; 11 } 12 if(t.find(B)!=string::npos) 13
return con; 14 t=t+A; 15 if(t.find(B)!=string::npos) 16 return con+1; 17 else 18 return -1; 19 20 } 21 };

python代碼:

 1 class Solution:
 2     def repeatedStringMatch(self, A, B):
 3         t=A
 4         con=1
 5         while len(t)<len(B):
 6             t=t+A
 7             con=con+1
 8         if t.find(B) != -1:
 9             return con
10         t=t+A
11         if t.find(B) != -1:
12             return con+1
13         else:
14             return -1

686. Repeated String Match