难度:Easy
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").
Note: The length of A and B will be between 1 and 10000.
可以将A循环补至长度大于B,然后判断B是否是增补的A的子集。 最后确定循环的A的次数。
class Solution {public:int repeatedStringMatch(string A, string B) {int t= B.size()/A.size()+1;string tmp=A;while(t--){tmp+=A;}size_t start= tmp.find(B);if(start ==string::npos) return -1;int end=start+B.size()-1;if(end == start) return 1;// cout<<start<<" "<< end << endl;start = start/A.size() *A.size();end = ((end+1)/A.size()+((end+1)%A.size() !=0) ) *A.size();// cout<<start<<" "<< end << endl;return (end-start)/A.size();}};
执行用时 :12 ms, 在所有 C++ 提交中击败了97.00%的用户 内存消耗 :9.1 MB, 在所有 C++ 提交中击败了82.83%的用户