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!
相关推荐
ZhengEnCi2 小时前
08c. 检索算法与策略-混合检索
后端·python·算法
程序员小崔日记3 小时前
大三备战考研 + 找实习:我整理了 20 道必会的时间复杂度题(建议收藏)
算法·408·计算机考研
任沫3 小时前
字符串
数据结构·后端
lizhongxuan4 小时前
AI小镇 - 涌现
算法·架构
AI工程架构师7 小时前
通常说算力是多少 FLOPS,怎么理解,GPU和CPU为什么差异这么大
算法
不想写代码的星星7 小时前
C++继承、组合、聚合:选错了是屎山,选对了是神器
c++
祈安_7 小时前
Java实现循环队列、栈实现队列、队列实现栈
java·数据结构·算法
归去_来兮21 小时前
拉格朗日插值算法原理及简单示例
算法·数据分析·拉格朗日插值
千寻girling1 天前
Python 是用来做 AI 人工智能 的 , 不适合开发 Web 网站 | 《Web框架》
人工智能·后端·算法
颜酱1 天前
一步步实现字符串计算器:从「转整数」到「带括号与优化」
javascript·后端·算法