이번 문제는 KMP 알고리즘을 활용하는 문제였다. 본인은 KMP 알고리즘을 처음 접해봤기 때문에 찾아보면서 해결했다.
KMP 알고리즘
#include <iostream>
#include <string>
#include <cstring>
#include <vector>
#include <algorithm>
using namespace std;
string s;
string p;
vector<int> pi;
void Input(){
cin>>s;
cin>>p;
}
void getPi(string a){
int m=a.size();
int j=0;
pi.resize(m, 0);
for(int i=1; i<m; i++){
while((j>0)&&a[i]!=a[j]){
j=pi[j-1];
}
if(a[i]==a[j]){
j++;
pi[i]=j;
}
}
}
bool KMP(string s, string p){
int i=0;
int j=0;
for(int i=0; i<s.size(); i++){
while((j>0)&&(s[i]!=p[j])){
j=pi[j-1];
}
if(s[i]==p[j]){
if(j==p.size()-1){
return true;
break;
}
else
j++;
}
}
return false;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
Input();
getPi(s);
cout<<KMP(s,p)<<endl;
return 0;
}