686.Repeated String Match

686.Repeated String Match

难度: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%的用户

Last updated