

思路:很简单的一道题,哎,都是泪,如果没有 * 号 ,直接判断是否相等即可,如果又,截取 * 两边字符串分别与 t 串比较,截取的两个字符串必须在 t 串的最左边和左右边才能匹配,噢对了 ,从长度上也可以判定一些数据,详细请看代码
#include<bits/stdc++.h>
using namespace std;
#define maxn 200005
typedef long long ll;
string a,b;
ll n,m;
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
cin >> n >> m;
cin >> a >> b;
if(n - m > 1)
{
cout << "NO" << endl;
return 0;
}
ll x = a.find('*');
if(x >= 0 && x < n )
{
if(n-m == 1)
{
string temp = a;
temp.erase(x,1);
if(temp == b)
{
cout << "YES" << endl;
return 0;
}
else
{
cout << "NO" << endl;
return 0;
}
}
string a1,a2;
ll A,B;
a1 = a.substr(0,x);
a2 = a.substr(x+1,n-x-1);
A = b.find(a1);
if(A != 0)
{
cout << "NO" << endl;
return 0;
}
B = b.rfind(a2);
if(B + a2.size() != m)
{
cout << "NO" << endl;
return 0;
}
cout << "YES" << endl;
}
else
{
if(a != b)
cout << "NO" << endl;
else
cout << "YES" << endl;
}
return 0;
}
本文介绍了一个简单的字符串匹配问题及其解决方案。通过分析输入字符串中的通配符'*',文章提出了一种有效的算法来判断两个字符串是否匹配。具体实现包括对字符串进行截取、比较,并利用C++标准库函数进行辅助。

被折叠的 条评论
为什么被折叠?



