【CF1023A】Single Wildcard Pattern Matching(模拟)
2024-08-29 10:15:21
题意:给定两个串s与t,其中s可能有至多一个通配符*可以被当做任意长度与内容的串,问t能否与s匹配
n,m<=2e5
思路:
#include<cstdio>
#include<cstring>
#include<string>
#include<cmath>
#include<iostream>
#include<algorithm>
#include<map>
#include<set>
#include<queue>
#include<vector>
using namespace std;
typedef long long ll;
typedef unsigned int uint;
typedef unsigned long long ull;
typedef pair<int,int> PII;
typedef vector<int> VI;
#define fi first
#define se second
#define MP make_pair
#define N 210000
#define MOD 1000000007
#define eps 1e-8
#define pi acos(-1)
#define oo 2000000000 char s[N],t[N],c[N]; int read()
{
int v=,f=;
char c=getchar();
while(c<||<c) {if(c=='-') f=-; c=getchar();}
while(<=c&&c<=) v=(v<<)+v+v+c-,c=getchar();
return v*f;
} void swap(int &x,int &y)
{
int t=x;x=y;y=t;
} int main()
{
// freopen("1.in","r",stdin);
// freopen("1.out","w",stdout);
int n,m;
scanf("%d%d",&n,&m);
scanf("%s",s);
scanf("%s",t);
int flag=;
int p=-;
for(int i=;i<=n-;i++)
if(s[i]=='*'){flag=; p=i; break;}
// printf("%d\n",flag);
if(!flag)
{
int ans=;
if(n!=m) ans=;
for(int i=;i<=n-;i++)
if(s[i]!=t[i]){ans=; break;}
if(ans) printf("YES\n");
else printf("NO\n");
}
else
{
int flag1=;
for(int i=;i<=p-;i++)
if(s[i]!=t[i]){flag1=; break;}
int flag2=;
int k=m-;
for(int i=n-;i>=p+;i--)
{
if(s[i]!=t[k]){flag2=; break;}
k--;
}
if(n-<=m&&flag1+flag2==) printf("YES\n");
else printf("NO\n");
} return ;
}
最新文章
- 大型网站系统与Java中间件实践
- 20套高品质的 Mobile &; Web 界面 PSD 素材免费下载
- linux挂载远程samba目录
- Newtonsoft 自定义输出内容
- HDU 2986 Ballot evaluation(精度问题)
- codeforces #286 Div.2 C DP总是以意外的方式打败我
- WebSocket协议再认识
- 对html语义化的理解
- Java-NIO(九):管道 (Pipe)
- React(五)State属性
- 关于C++ return * this
- Percona Server 升级 5.7 到 8.0 版本
- 性能测试工具--SIEGE安装及使用简介 siege压力测试
- python 小程序,猜年龄
- PYTHON-TCP 粘包
- 使用LinkedHashMap来实现一个使用LRU(Least Recently Used)算法的cache
- log4net修改数据库连接字符串和写自定义信息
- Knockout与Require框架同时使用时的visible绑定的问题,造成的影响,以及解决的方法。
- iOS中textbox文本框清除圆角
- 【Alpha】阶段第十次Scrum Meeting