求助
查看原帖
求助
332914
happybob楼主2021/11/20 21:17
#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
#include <regex>
using namespace std;

const int N = 2 * 1e5 + 5;
char z[N], p[N];
string a, b;

int main()
{
	scanf("%*d %*d");
	cin >> z >> p;
	a = z, b = p;
	int place = a.find("*");
	if (a.length() - 1 > b.length())
	{
		cout << "NO\n";
		return 0;
	}
	if (a == b)
	{
		cout << "YES\n";
		return 0;
	}
	if (a.length() - b.length() == 1)
	{
		if (place == string::npos)
		{
			cout << "NO\n";
			return 0;
		}
		a.erase(place, 1);
		/*cout << "a: " << a << endl;
		cout << "b: " << b << endl;
		*/
		if (a != b)
		{
			cout << "NO\n";
		}
		else cout << "YES\n";
		return 0;
	}
	if (a.length() == b.length())
	{
		if (place == string::npos && a != b)
		{
			cout << "NO\n";
			return 0;
		}
		for (char x = 'a'; x <= 'z'; x++)
		{
			a[place] = x;
			if (a == b)
			{
				cout << "YES\n";
				return 0;
			}
		}
		cout << "NO\n";
		return 0;
	}
	if (place == string::npos && a != b)
	{
		cout << "NO\n";
		return 0;
	}
	string sub_first = a.substr(0, place);
	string sub_last = a.substr(place + 1, (a.length() - 1) - (place + 1) + 1);
	string regs = "^" + sub_first + "[a-z]*" + sub_last + "$";
	regex reg(regs);
	if (regex_match(p, reg))
	{
		cout << "YES\n";
	}
	else cout << "NO\n";
	return 0;
}

#59 RE

2021/11/20 21:17
加载中...