codevs 1204 寻找子串位置

题目描述 Description

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

输入描述 Input Description

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

输出描述 Output Description

仅一行一个整数

样例输入 Sample Input

abcd bc

样例输出 Sample Output

2

数据范围及提示 Data Size & Hint

字符串的长度均不超过100

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

//详细的KMP讲解,我觉得比较好的http://kb.cnblogs.com/page/176818/

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
int main()
{
	char a[101],b[101];
	int l1,l2,f[101];
	cin>>a;
	cin>>b;
	l1=strlen(a);
	l2=strlen(b);
	f[0]=0;
	//对b串进行自匹配,保存在f数组中 ↓
	for (int i=1,j=0;i<l2;i++)
	  {
	  	 while (j>0&&b[i]!=b[j]) j=f[j];
	     if (b[i]==b[j]) j++;
	       f[i]=j;
	  }
	//对b串进行自匹配,保存在f数组中 ↑

	for (int i=0,j=0;i<l1;i++)//对a,b串进行匹配
	  {
	  	 while (j>0&&a[i]!=b[j]) j=f[j];//若是a,b串不匹配,则将b串正在匹配的位置移动到它上一个重复的位置
	  	 if (a[i]==b[j]) j++;
	  	 if (j==l2)
	  	   {
	  	      cout<<i-l2+2;
			  break;
		   }
	  }

	return 0;
}

  

时间: 2024-12-08 06:04:56

codevs 1204 寻找子串位置的相关文章

Wikioi 1204寻找子串位置(strstr()函数)

1204 寻找子串位置 题目描述 Description 给出字符串a和字符串b,保证b是a的一个子串,请你输出b在a中第一次出现的位置. 输入描述 Input Description 仅一行包含两个字符串a和b 输出描述 Output Description 仅一行一个整数 样例输入 Sample Input abcd bc 样例输出 Sample Output 2 数据范围及提示 Data Size & Hint 字符串的长度均不超过100 Pascal用户请注意:两个字符串之间可能包含多个

1204 寻找子串位置

1204 寻找子串位置 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 青铜 Bronze 题目描述 Description 给出字符串a和字符串b,保证b是a的一个子串,请你输出b在a中第一次出现的位置. 输入描述 Input Description 仅一行包含两个字符串a和b 输出描述 Output Description 仅一行一个整数 样例输入 Sample Input abcd bc 样例输出 Sample Output 2 数据范围及提示 Data Size & H

[1204 寻找子串位置] 解题报告

题目描述 Description 给出字符串a和字符串b,保证b是a的一个子串,请你输出b在a中第一次出现的位置. 输入描述 Input Description 仅一行包含两个字符串a和b 输出描述 Output Description 仅一行一个整数 样例输入 Sample Input abcd bc 样例输出 Sample Output 2 数据范围及提示 Data Size & Hint 字符串的长度均不超过100 Pascal用户请注意:两个字符串之间可能包含多个空格 #include

寻找子串位置 codevs 1204

题目描述 Description 给出字符串a和字符串b,保证b是a的一个子串,请你输出b在a中第一次出现的位置. 输入描述 Input Description 仅一行包含两个字符串a和b 输出描述 Output Description 仅一行一个整数 样例输入 Sample Input abcd bc 样例输出 Sample Output 2 数据范围及提示 Data Size & Hint 字符串的长度均不超过100 代码: #include<iostream>#include&l

寻找子串位置&lt;codevs&gt;

KMP板子题; 如果不会可以参考其他算法书 代码: #include<iostream> #include<stdio.h> #include<stdlib.h> #include<cstring> using namespace std; string s1,s2; int len1,len2; int f[200000]; int main(){ cin>>s1>>s2; len1=s1.size(),len2=s2.size()

CODE[VS]-寻找子串位置-字符串处理-天梯青铜

题目描述 Description 给出字符串a和字符串b,保证b是a的一个子串,请你输出b在a中第一次出现的位置. 输入描述 Input Description 仅一行包含两个字符串a和b 输出描述 Output Description 仅一行一个整数 样例输入 Sample Input abcd bc 样例输出 Sample Output 2 数据范围及提示 Data Size & Hint 字符串的长度均不超过100 Pascal用户请注意:两个字符串之间可能包含多个空格 思路:因为它是用一

【CODEVS1204】寻找子串位置

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

codevs1204 寻找子串位置

题目描述 Description 给出字符串a和字符串b,保证b是a的一个子串,请你输出b在a中第一次出现的位置. 输入描述 Input Description 仅一行包含两个字符串a和b 输出描述 Output Description 仅一行一个整数 样例输入 Sample Input abcd bc 样例输出 Sample Output 2 #include<iostream> #include<cstdio> #include<cstring> #include&

匈牙利算法 codevs 2776 寻找代表元

codevs 2776 寻找代表元 时间限制: 1 s 空间限制: 256000 KB 题目等级 : 黄金 Gold 题目描述 Description 广州二中苏元实验学校一共有n个社团,分别用1到n编号.广州二中苏元实验学校一共有m个人,分别用1到m编号.每个人可以参加一个或多个社团,也可以不参加任何社团.每个社团都需要选一个代表.谦哥希望更多的人能够成为代表. 输入描述 Input Description 第一行输入两个数n和m.以下n行每行若干个数,这些数都是不超过m的正整数.其中第i行的