#include<bits/stdc++.h>
using namespace std;
const int N = 105;
int nextT[N];
void getNext(string pattern) {
int m = pattern.size();
int i = 0;
nextT[0] = -1;
int t = nextT[i];
while (i < m) {
if (t == -1 || pattern[i] == pattern[t]) {
i++;
t++;
nextT[i] = t;
} else {
t = nextT[t];
}
}
}
int kmp(string pattern, string text) {
getNext(pattern);
int n = text.size();
int m = pattern.size();
int i = 0;
int j = 0;
while (i < n && j < m) {
if(j==-1||pattern[j]==text[i]) {
i++;
j++;
} else {
j=nextT[j];
}
}
if(j==m) {
return i-j+1;
} else {
return -1;
}
}
int main() {
int n,x;
string pattern,pattern2;
cin >> pattern;
cin>>x>>n;
string text;
if(x==0) {
for(int i=0;i<pattern.size();i++) {
if(pattern[i]>='A'&&pattern[i]<='Z') pattern[i]=pattern[i]+'a'-'A';
}
}
for(int i=0;i<n;i++) {
cin>>text;
string text2 = text;
if(x==0) {
for(int j=0;j<text.size();j++) {
if(text[j]>='A'&&text[j]<='Z'){
text[j]+='a'-'A';
}
}
}
if(kmp(pattern,text)>=0) {
cout<<text2<<endl;
}
}
return 0;
}
字符串匹配
最新推荐文章于 2024-10-16 00:00:43 发布