數據結構實驗之串一:KMP簡單應用

Problem Description
給定兩個字符串string1和string2,判斷string2是否爲string1的子串。 
Input
 輸入包含多組數據,每組測試數據包含兩行,第一行代表string1(長度小於1000000),第二行代表string2(長度小於1000000),string1和string2中保證不出現空格。 
Output
 對於每組輸入數據,若string2是string1的子串,則輸出string2在string1中的位置,若不是,輸出-1。 
Example Input
abc
a
123456
45
abc
ddd
Example Output
1
4
-1
Hint
  


這道題的時間和內存限制都是一般題目的限制,所以我覺得不用kmp也可能會過,不出意料,果然AC了。

下面這個方法是用了 strstr() 函數

strstr是一種函數,從字符串str1中查找是否有符串str2,如果有,從str1中的str2位置起,返回str1的指針,如果沒有,返回null。這是360百科對strstr函數的說明。

特別注意的是,這個函數返回的是指針。

#include<stdio.h>
#include<string.h>
#include<iostream>
using namespace std;
char s1[1000010],s2[1000010];
int main(){
	while((scanf("%s%s",s1,s2))!=EOF){
		char *ch=strstr(s1,s2);
		if(ch=='\0')
		cout<<"-1"<<endl;
		else
		cout<<ch-s1+1<<endl;	
	}
}


KMP做法網上相當多,可以搜索一下,隨後更新KMP用法,正在學習中。。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章