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!
相关推荐
mahuifa2 分钟前
(46)VTK C++开发示例 --- 加载CML文件
c++·3d·vtk·cml
ouliten8 分钟前
C++笔记:流式异步日志库
c++·笔记
学编程就要猛11 分钟前
数据结构初阶:Map和Set接口
数据结构
橘子真甜~15 分钟前
C/C++ Linux网络编程13 - 传输层TCP协议详解(面向字节流和有连接)
linux·运维·服务器·c语言·网络·c++·tcp/ip
jianfeng_zhu17 分钟前
不带头节点的链式存储实现链栈
数据结构·算法
lightqjx20 分钟前
【算法】双指针
c++·算法·leetcode·双指针
历程里程碑23 分钟前
C++ 7vector:动态数组的终极指南
java·c语言·开发语言·数据结构·c++·算法
mit6.82425 分钟前
get+二分|数位dp
算法
sin_hielo29 分钟前
leetcode 2147
数据结构·算法·leetcode
萌>__<新42 分钟前
力扣打卡每日一题——缺失的第一个正数
数据结构·算法·leetcode