leetcode 686. 重复叠加字符串匹配

题目如下

数据范围

复制代码
题目的意思是问我们是否可以在n个a中找到b,且问你n是多少。
首先我们可以枚举n,那么n的上限在哪?
是不是当i - len(b) > len(a)时该停下来。(因为这个时候相当于开始把第(n + 1的a[0]和b[0]做比较?)
即开始循环,但是显然我们不需要这样的循环。
换句话说如果在进入循环前没找到b就代表我们找不到一个n使得a中能找到b。

通过代码

cpp 复制代码
class Solution {
public:
    int repeatedStringMatch(string a, string b) {
        int n = a.size();
        int m = b.size();
        vector<int> next(m,0);
        for(int i = 1,j = 0;i < m;i++){
            while(j > 0 && b[i] != b[i])j = next[j - 1];
            if(b[i] == b[j])j++;
            next[i] = j;
        }
        for(int i = 0,j = 0;i - m < n;i++){
            while(j > 0 && b[j] != a[i % n])j = next[j - 1];
            if(a[i % n] == b[j])j++;
            if(j == m)return i/n + 1;
        }
        return -1;
    }
};//思路中的写法 good!
相关推荐
无限进步_10 分钟前
从零实现一个迷你Shell——深入理解Linux命令行解释器
linux·运维·服务器·开发语言·c++·chrome
羊羊小栈19 分钟前
Uplift营销供应链协同决策系统(基于Uplift因果推断与运筹优化算法)
前端·人工智能·算法·毕业设计·大作业
fpcc30 分钟前
工具使用——CMake中的函数和宏
c++·cmake
金融小师妹1 小时前
AI因子共振模型显示:金银比突破区间上沿,白银定价逻辑进入再校准阶段
人工智能·算法·均值算法·线性回归
不会就选b1 小时前
数据结构之链表OJ题(中)
数据结构·链表
J2虾虾1 小时前
C语言 typedef 用法
c语言·数据结构·算法
hunterkkk(c++)1 小时前
线段树例题
算法
乐观勇敢坚强的老彭1 小时前
C++信息学奥赛lesson1
java·开发语言·c++
故渊at1 小时前
第二板块:Android 四大组件标准化学理 | 第七篇:Activity 页面载体与任务栈算法
android·算法·生命周期·activity·任务栈
Irissgwe1 小时前
C++ STL关联式容器详解:set、multiset、map、multimap
开发语言·c++·stl·set·map·multiset·关联式容器