PTA 7-4列のパターンマッチング(25点)
2539 ワード
2つの英字文字列StringとPatternが与えられ、StringでPatternが最初に現れる位置を見つけ、その位置の後のStringのサブストリングを出力する必要がある.見つからない場合は「Not Found」を出力します.
本問題は,種々の異なるマッチングアルゴリズムの種々のデータの場合の表現をテストすることを目的とする.各グループのテストデータの特徴は以下の通りである.データ0:小規模文字列、基本的な正確性をテストする; データ1:ランダムデータ、String長さ10 5、Pattern長さ10; データ2:ランダムデータ、String長さ10 5、Pattern長さ10 2; データ3:ランダムデータ、String長さ10 5、Pattern長さ10 3; データ4:ランダムデータ、String長さ10 5、Pattern長さ10 4; データ5:String長さは10 6、Pattern長さは10 5.末尾文字が一致しない場合をテストします. データ6:String長さは10 6、Pattern長さは10 5である.最初の文字が一致しない場合をテストします.
最初の行にStringを入力します.英字で構成され、長さが10 6を超えない文字列です.2行目は、一致するパターン列の個数である正の整数N(≦10)を与える.その後、N行、各行に1つのPatternが与えられ、英字で構成され、長さが10 5を超えない文字列が与えられる.各文字列は空ではなく、車に戻って終了します.
各Patternについて,問題面の要求に従ってマッチング結果を出力する.
ブロガーは最初はKMPモードマッチングアルゴリズムを使っていましたが、いつも5番目のテストポイントでエラーが発生し、仕方なく、最後にC標準ライブラリの文字列マッチング関数strstr()を使ってテストに成功し、標準ライブラリがあるのは本当に気持ちがいいです.
ここにKMPアルゴリズムのプログラムを貼って、大物が間違いを指摘してくれることを望んでいます.
本問題は,種々の異なるマッチングアルゴリズムの種々のデータの場合の表現をテストすることを目的とする.各グループのテストデータの特徴は以下の通りである.
入力形式:
最初の行にStringを入力します.英字で構成され、長さが10 6を超えない文字列です.2行目は、一致するパターン列の個数である正の整数N(≦10)を与える.その後、N行、各行に1つのPatternが与えられ、英字で構成され、長さが10 5を超えない文字列が与えられる.各文字列は空ではなく、車に戻って終了します.
出力フォーマット:
各Patternについて,問題面の要求に従ってマッチング結果を出力する.
サンプルを入力:
abcabcabcabcacabxy
3
abcabcacab
cabcabcd
abcabcabcabcacabxyz
出力サンプル:
abcabcacabxy
Not Found
Not Found
ブロガーは最初はKMPモードマッチングアルゴリズムを使っていましたが、いつも5番目のテストポイントでエラーが発生し、仕方なく、最後にC標準ライブラリの文字列マッチング関数strstr()を使ってテストに成功し、標準ライブラリがあるのは本当に気持ちがいいです.
#include
#include
#include
#include
using namespace std;
int main()
{
char s1[1000001];
scanf("%s",s1);
int N;
cin >> N;
char s2[10][100001];
for(int i = 0;i>s2[i];
}
string s3[10];
char *s;
for(int i = 0;i
ここにKMPアルゴリズムのプログラムを貼って、大物が間違いを指摘してくれることを望んでいます.
#include
#include
#include
#include
using namespace std;
const int MAX = 100001;
void get_next(string t,int *next)
{
int i = 0;//next
int j = -1;//next[] , 0~m-1
next[0] = -1;
while(i=length) return i-length;
else return 0;
}
int main()
{
string s;
cin >> s;
int N;//
cin >> N;
string t[N];
for(int i = 0;i> t[i];
}
int result[N];
for(int i = 0;i < N;i++)
{
result[i] = KMP(s,t[i]);
}
for(int i = 0;i