首页 > 其他分享 >洛谷P3375

洛谷P3375

时间:2024-10-11 14:59:48浏览次数:7  
标签:size 匹配 int ios 洛谷 P3375 define

kmp算法:扫描字符串A,并且更新可以匹配到B的什么位置。时间复杂度O(n)。
P[i]表示当前模式串在该位置匹配冲突时,应该将模式串的哪一位与此对齐。
总之就是扫描字符串A,并更新2可以匹配到什么位置

点击查看代码
#include <bits/stdc++.h>
#define ios ios::sync_with_stdio(false); cin.tie(0); cout.tie(0);
#define endl "\n"
#define N 1000005
using namespace std;
int p[N];//当前匹配到j个字母和j+1个字母不能匹配的时候,新的j的最大值是多少:p[1]=0
signed main()
{
    ios;
    string A,B;cin>>A>>B;
    A=" "+A;B=" "+B;
    int la=A.size()-1,lb=B.size()-1,j,i;
    for(i=2,j=0;i<=lb;i++)
    {
        while(j&&B[i]!=B[j+1])j=p[j];//不能匹配且j还没到0后退一步
        if(B[i]==B[j+1])j++;
        p[i]=j;
    }
    for(i=1,j=0;i<=la;i++)
    {
        while(j&&A[i]!=B[j+1])j=p[j];//不嫩继续匹配且j还没减少到0,减少j的值
        if(A[i]==B[j+1])j++;//能继续匹配j+1
        if(j==lb)
        {
            cout<<i-lb+1<<endl;//输出字串首在字符串中的位置
            j=p[j];//继续寻找匹配(可以重叠)
        }
    }
    for(int i=1;i<=lb;i++)cout<<p[i]<<" ";
    return 0;
}

标签:size,匹配,int,ios,洛谷,P3375,define
From: https://www.cnblogs.com/youyong1/p/18458421

相关文章

  • 洛谷P10387 [蓝桥杯 2024 省 A] 训练士兵
    洛谷P10387[蓝桥杯2024省A]训练士兵1.Mysolution#include<stdio.h>#include<algorithm>#include<cmath>#include<iostream>#include<set>#include<string>#defineFor(i,j,n)for(inti=j;i<=n;++i)template&l......
  • 洛谷P2224产品加工(DP)
    [HNOI2001]产品加工题目描述某加工厂有A、B两台机器,来加工的产品可以由其中任何一台机器完成,或者两台机器共同完成。由于受到机器性能和产品特性的限制,不同的机器加工同一产品所需的时间会不同,若同时由两台机器共同进行加工,所完成任务又会不同。某一天,加工厂接到\(n\)个......
  • 洛谷P4074糖果公园(带修莫队)
    [WC2013]糖果公园题目描述Candyland有一座糖果公园,公园里不仅有美丽的风景、好玩的游乐项目,还有许多免费糖果的发放点,这引来了许多贪吃的小朋友来糖果公园游玩。糖果公园的结构十分奇特,它由\(n\)个游览点构成,每个游览点都有一个糖果发放处,我们可以依次将游览点编号为\(1\)......
  • 洛谷 P7517 [省选联考 2021 B 卷] 数对
    题目传送门解题思路其实你只要知道:这题你就秒了。我们发现 ,于是开一个桶来统计每个数出现的数量。我们只需要枚举每一个数的倍数,然后统计。最后,如果一个数出现了多次,再特判一下即可。代码#include<bits/stdc++.h>usingnamespacestd;intn;intcnt[500001];......
  • 洛谷题单指南-字符串-P2580 于是他错误的点名开始了
    原题链接:https://www.luogu.com.cn/problem/P2580题意解读:给n个字符串,再依次处理m个字符串,对于每个字符串,如果在前面n个字符串中输出OK,如果不在n个字符串中输出WRONG,如果在n个字符串中且不止一次查询过输出REPEAT。解题思路:1、set/map方法很简单直接,用set存下前n个字符串,map......
  • 洛谷题单指南-字符串-P1481 魔族密码
    原题链接:https://www.luogu.com.cn/problem/P1481题意解读:在n个字符串中找到最长的词链长度,定义字符串a、b、c可以形成词链,即a是b的前缀、b是c的前缀。解题思路:1、Trie树定义Trie树,也称前缀树、字典树,核心思想是将字符串拆解为单个字符,每个字符是树的一条边,节点是字符添加到树......
  • 洛谷题单指南-字符串-P4391 [BOI2009] Radio Transmission 无线传输
    原题链接:https://www.luogu.com.cn/problem/P4391题意解读:s1由若干个s2组成,求s2的最小长度,注意题目中说明s1是子串,但是不影响,可以认为s1是补全的由若干s2组成的字符串。解题思路:设s1由x个s2组成,如图所示设s1的Next数组从0开始,那么其最长相同前后缀长度为x-1个s2,即Next[s1.siz......
  • 洛谷P3258 [JLOI2014] 松鼠的新家
    Problem给定一棵树,再给出其在树上的移动顺序,从\(a_1\)开始,在\(a_n\)结束,求出每个节点最少需要经过多少次(终点即\(a_n\)的最后一次到达不算)。其中\(n\le3\times10^5\),\(1\lea_i\len\)且保证a是1~n的排列Solve不难想到最少遍历的次数就是全走最短路,而一棵树中u->v的最短......
  • 洛谷 P7469 [NOI Online 2021 提高组] 积木小赛(字符串哈希)
    题目传送门解题思路读题后,我们可以发现,字母串  只能从两边删除,于是我们可以枚举一个区间 ,然后在字母串  中匹配(可以用指针来进行匹配),同时可以做字符串哈希去重。注意如果怕被卡,可以用双模哈希;记得开longlong代码#include<bits/stdc++.h>usingnamespacestd;......
  • 洛谷题单指南-字符串-P3375 【模板】KMP
    原题链接:https://www.luogu.com.cn/problem/P3375题意解读:给定两个字符串:原串s,模式串p,求p在s中出现的所有位置,并输出p的长度为1~p.size()的子串的最长相同真前、后缀的长度。解题思路:KMP模版题,分两问,第一问通过KMP核心算法实现,第二问输出模式串的Next数组内容,接下来一一解读。......