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!
相关推荐
赫瑞20 分钟前
数据结构中的排列组合 —— Java实现
java·开发语言·数据结构
大熊背25 分钟前
ISP Pipeline中Lv实现方式探究之三--lv计算定点实现
数据结构·算法·自动曝光·lv·isppipeline
初夏睡觉1 小时前
c++1.3(变量与常量,简单数学运算详解),草稿公放
开发语言·c++
西岸行者1 小时前
BF信号是如何多路合一的
算法
阿拉斯攀登1 小时前
从入门到实战:CMake 与 Android JNI/NDK 开发全解析
android·linux·c++·yolo·cmake
大熊背1 小时前
ISP Pipeline中Lv实现方式探究之一
算法·自动白平衡·自动曝光
罗西的思考2 小时前
【OpenClaw】通过 Nanobot 源码学习架构---(5)Context
人工智能·算法·机器学习
Liudef063 小时前
后量子密码学(PQC)深度解析:算法原理、标准进展与软件开发行业的影响
算法·密码学·量子计算
OYpBNTQXi4 小时前
SEAL全同态加密CKKS方案入门详解
算法·机器学习·同态加密
筱璦4 小时前
期货软件开发 - C# 调用 HQChart 指标计算 C++ 动态库
c++·microsoft·c#