6月2日刷《找出字符串中第一个匹配项的下标》扩展——686. 重复叠加字符串匹配

100 阅读1分钟

686. 重复叠加字符串匹配

image.png

思路

class Solution {
public:
    int repeatedStringMatch(string a, string b) {
        //例如案例 2 ,复制的次数是 bSize / aSize
        //例如示例 1 ,复制的次数是 bSize / aSize + 1
        //例如:a = "abcd" , b = "dabcdabcda" ,需要复制 bSize / aSize + 2 次,得到 "abcdabcdabcdabcd"
        //只有这三种可能,再多复制也只是重复了
        //那么我们就对这三种情况分别应用 find 函数,如果查找到了就返回对应的复制次数
        int sizeA = a.size();
        int sizeB = b.size();
        int k = sizeB/sizeA;
        string temp1 = "";
        for(int i=0;i<k;i++){
            temp1 += a;
        }
        //cout<<"temp1:"<<temp1<<endl;
        string temp2 = temp1 + a;
        string temp3 = temp2 + a;
        if(temp1.find(b)!=std::string::npos){
            return k;
        }
        else if(temp2.find(b)!=std::string::npos){
            return k+1;
        }
        else if(temp3.find(b)!=std::string::npos){
            return k+2;
        }
        return -1;
    }
};