【CODEVS1204】寻找子串位置
发布日期:2021-08-15 22:29:26 浏览次数:44 分类:技术文章

本文共 914 字,大约阅读时间需要 3 分钟。

Description

给出字符串a和字符串b,保证b是a的一个子串,请你输出b在a中第一次出现的位置。

Input

仅一行包含两个字符串a和b

Output

仅一行一个整数

Sample Input

abcd bc

Sample Output

2

Hint

字符串的长度均不超过100

Pascal用户请注意:两个字符串之间可能包含多个空格

 

#include
#include
#include
using namespace std;int fail[1000],f[1000],kmp;int main(){ char s1[100],s2[100]; scanf("%s%s",s1+1,s2+1); int l1=strlen(s1+1),l2=strlen(s2+1); fail[1] = 0; for (int i=2;i<=l2;i++) { int p = fail[i-1]; while (p && s2[p+1] !=s2[i]) p=fail[p]; if (s2[p+1] == s2[i]) p++; fail[i] = p; } int p=0; for (int i=1;i<=l1;i++) { while (p && s2[p+1] != s1[i]) p=fail[p]; if (s2[p+1] == s1[i]) p++; f[i] = p; if (p == l2) { printf("%d",i-l2+1); break; } }}

 

转载于:https://www.cnblogs.com/liumengyue/p/5189395.html

转载地址:https://blog.csdn.net/weixin_30781107/article/details/97106826 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:使用hibernate实现树形结构无限级分类
下一篇:彻底理解ReentrantLock

发表评论

最新留言

能坚持,总会有不一样的收获!
[***.219.124.196]2024年04月13日 03时02分19秒