九度oj 1094
来源:互联网 发布:阿里云大学在哪打开 编辑:程序博客网 时间:2024/06/05 02:39
- 题目描述:
Finding all occurrences of a pattern in a text is a problem that arises frequently in text-editing programs.
Typically,the text is a document being edited,and the pattern searched for is a particular word supplied by the user.
We assume that the text is an array T[1..n] of length n and that the pattern is an array P[1..m] of length m<=n.We further assume that the elements of P and T are all alphabets(∑={a,b...,z}).The character arrays P and T are often called strings of characters.
We say that pattern P occurs with shift s in the text T if 0<=s<=n and T[s+1..s+m] = P[1..m](that is if T[s+j]=P[j],for 1<=j<=m).
If P occurs with shift s in T,then we call s a valid shift;otherwise,we calls a invalid shift.
Your task is to calculate the number of vald shifts for the given text T and p attern P.
- 输入:
For each case, there are two strings T and P on a line,separated by a single space.You may assume both the length of T and P will not exceed 10^6.
- 输出:
You should output a number on a separate line,which indicates the number of valid shifts for the given text T and pattern P.
- 样例输入:
abababab abab
- 样例输出:
3
- 来源:
2006年上海交通大学计算机研究生机试真题
#include<iostream>#include<string.h>const int max=1000000+5;char p[max];char t[max];int next[max];using namespace std;void getnext(int size){ int i=0; int j=-1; next[0]=-1; while(i<size) { if(j==-1||t[i]==t[j]) { i++; j++; (t[i]==t[j])?next[i]=next[j]:next[i]=j; } else j=next[j]; } } int kmp(int size1,int size2) { int i=0; int j=0; int ans=0; while(i<size1) { if(j==-1||p[i]==t[j]) { i++; j++; } else { j=next[j]; } if(j==size2) { ans++; j=next[j]; } } return ans; } int main() { while(cin>>p>>t) { int l1=strlen(p); int l2=strlen(t); getnext(l2); cout<<kmp(l1,l2)<<endl; } }
- 九度oj 1094
- 【九度OJ】:九度OJ 1050
- 【九度OJ】:九度OJ 1053
- 【九度OJ】:九度OJ 1056
- 【九度OJ】:九度OJ 1059
- 【九度OJ】:九度OJ 1206
- 九度OJ 1094 String Matching
- 九度OJ 1094 String Matching
- <九度 OJ>题目1094:String Matching
- 九度oj-1094-String Matching
- 九度OJ:1000
- 【九度OJ】 1006
- 九度 OJ 1499
- 九度OJ-1002
- 九度OJ-1003
- 九度OJ 1004
- 九度OJ 1003
- 九度oj 采药
- C/C++的内存分配
- 二叉树已知先序遍历和中序遍历得到后序遍历
- 最短路【SPFA】算法模板
- 常量、变量、运算符
- 一场比赛一道题【bfs】
- 九度oj 1094
- C++继承、虚继承、虚函数类的大小问题
- 母函数(Generating function)详解(转)
- iGrimace Cydia使用
- S-Trees
- [BZOJ1069][SCOI2007]最大土地面积
- fastdfs5.0.5+nginx安装+tracker+storage
- Linux 虚拟地址与物理地址的映射关系分析
- 【LeetCode】119_Pascal's Triangle II