8.21 问题 F: #103. 子串查找
来源:互联网 发布:java平方怎么表示 编辑:程序博客网 时间:2024/05/19 12:38
问题 F: #103.子串查找
题目描述
这是一道模板题。
给定一个字符串 A和一个字符串 B,求 B 在 A 中的出现次数。
A中不同位置出现的 B 可重叠。
输入
输入共两行,分别是字符串 A 和字符串 B。
输出
输出一个整数,表示 B 在 A 中的出现次数。
样例输入
zyzyzyz
zyz
样例输出
3
提示
1≤A,B 的长度 ≤106 ,A 、B 仅包含大小写字母。
简单KMP模板水题。
因为之前写KMP时next数组有两个计算方式,记得时候记混了,导致错了几次。
#include<stdio.h>#include<string.h>int next[1010000];char s1[1010000],s2[1010000];int main(){ int i,j,k,m,n,a,b; memset(s1,0,sizeof(s1)); memset(s2,0,sizeof(s2)); while(scanf("%s%s",s1,s2)!=EOF) { memset(next,0,sizeof(next)); m=strlen(s1); n=strlen(s2); i=1;j=0; while(i<n)//计算next数组 { if(s2[i]==s2[j]) { // printf("%c %c\n",s1[i],s1[j]); i++; j++; next[i-1]=j;//注意这一点赋值顺序是在i++和j++之前还是之后 } else if(j==0&&s2[i]!=s2[j]) { // printf("%c %c\n",s1[i],s1[j]); i++; } else if(j>0&&s2[i]!=s2[j]) { // printf("%c %c\n",s1[i],s1[j]); j=next[j-1]; } }// for(i=0;i<=n;i++)// {// printf("%d ",next[i]);// }// printf("\n"); i=0;j=0; int f=0; while(i<m)//KMP算法 { if(s1[i]==s2[j]) { // printf("%c %c i=%d j=%d\n",s1[i],s2[j],i,j); i++; j++; } else if(j==0&&s1[i]!=s2[j]) { // printf("%c %c i=%d j=%d\n",s1[i],s2[j],i,j); i++; } else if(j>0&&s1[i]!=s2[j]) { // printf("%c %c i=%d j=%d\n",s1[i],s2[j],i,j); j=next[j-1]; } if(j==n)//当j==n时表示第二个字符串在第一个字符串中出现一次 { // printf("%d\n",i); j=next[j-1]; f++; } } printf("%d\n",f); } return 0;}
阅读全文
0 0
- 8.21 问题 F: #103. 子串查找
- 子串查找问题
- 问题 B: #103. 子串查找
- 子串查找问题改进算法
- [I0A]查找最大子串问题的求解
- kmp 子串查找
- string 查找子串
- 原串中查找子串
- java查找子串
- 子串查找
- 查找子串
- 查找字符子串
- 查找子串函数
- 查找子串
- 查找子串
- 最小子串查找
- 查找子串
- 查找子串
- 浏览器的跨域问题以及解决方案
- Maven依赖范围、传递、排除
- Maven POM文件解析
- ButterKnife的引用
- Maven标准目录结构
- 8.21 问题 F: #103. 子串查找
- Maven常用命令详情
- Reactor模式和NIO
- 在centos linux 环境下使用火焰图
- c语言二分查找算法
- Maven介绍与安装
- C
- 什么是Spring Boot?
- 区块链技术