Description
给出字符串a和字符串b,保证b是a的一个子串,请你输出b在a中第一次出现的位置。
Input
仅一行包含两个字符串a和b
Output
仅一行一个整数
Sample Input
abcd bc
Sample Output
2
Hint
字符串的长度均不超过100
Pascal用户请注意:两个字符串之间可能包含多个空格
#include<iostream> #include<cstring> using namespace std; char a[110],b[110]; int next[110],f[110]; int main() { cin>>a>>b; int n=strlen(a),m=strlen(b); next[0]=0; //求next数组↓ for (int i=1,j=0;i<=m;i++)//对b串自匹配 { while (j>0 && b[j]!=b[i]) j=next[j]; if (b[j]==b[i]) j++; next[i]=j; } //求next数组↑ for (int i=0,j=0;i<=n;i++)//a串与b串进行模式匹配 { while (j>0 && (j==m || a[i]!=b[j])) j=next[j]; if (a[i]==b[j]) j++; f[i]=j; } for (int i=0;i<=n;i++) if (f[i]==m) cout<<i-m+2; return 0; }
时间: 2024-10-10 01:50:49