Codeforces Round #504 (rated, Div. 1 + Div. 2, based on VK Cup 2018 Final)-A-Single Wildcard Pattern Matching
#include<iostream> #include<algorithm> #include<stdio.h> #include<string.h> using namespace std; char a[200006]; char b[200006]; int main() { int n,m; int lena; int lenb; while(~scanf("%d%d",&n,&m)) { scanf("%s",a); scanf("%s",b); char c[200006]; int lena=strlen(a); int lenb=strlen(b); if (lena>lenb+1) { printf("NO\n"); } else { int f=-1; for (int i=0; i<lena; i++) { if (a[i]=='*') { f=i; for (int j=i+1; j<lena; j++) { c[j-i-1]=a[j]; } c[lena-i-1]='\0'; break; } } if (f==-1){ if (!strcmp(a,b)){ printf("YES\n"); continue; }else { printf("NO\n"); continue; } } int lenc=strlen(c); int flag=0; for(int i=0;i<f;i++){ // cout<<a[i]<<" "<<b[i]<<endl; if (a[i]!=b[i]){ flag=1; break; } } for (int i=lenb-1; i>=lenb-lenc; i--) { // cout<<b[i]<<" "<<c[i-lenb+lenc]<<endl; if( b[i]!=c[i-lenb+lenc]){ flag=1; break; } } if (flag==0)printf("YES\n"); else printf("NO\n"); } } return 0; }