题解 | #字符串通配符#动态规划

字符串通配符

https://www.nowcoder.com/practice/43072d50a6eb44d2a6c816a283b02036

#include<iostream>
#include<vector>
#include<string>
#include<algorithm>

using namespace std;

int main() {
	string a, b;
	cin >> a >> b;
	int lena = a.size();
	int lenb = b.size();
	for (int i = 0; i < lena; i++)
		if (a[i] >= 'A'&&a[i] <= 'Z') a[i] = a[i] - 'A' + 'a';
	for (int i = 0; i < lenb; i++)
		if (b[i] >= 'A'&&b[i] <= 'Z') b[i] = b[i] - 'A' + 'a';
	vector<vector<int>>dp(lena + 1, vector<int>(lenb + 1, 0));
	dp[0][0] = 1;
	for (int j = 1; j <= lenb; j++) dp[0][j] = 0;
	for (int i = 1; i <= lena; i++)
		if (a[i - 1] == '*') dp[i][0] = dp[i - 1][0];
	for(int i=1;i<=lena;i++)
		for (int j = 1; j <= lenb; j++) {
			if (a[i - 1] == b[j - 1]) dp[i][j] = dp[i - 1][j - 1];
			else {
				if (!(b[j - 1] >= 'a'&&b[j - 1] <= 'z' || b[j - 1] >= '0'&&b[j - 1] <= '9')) dp[i][j] = 0;
				else if (a[i - 1] == '*') dp[i][j] = max(dp[i - 1][j - 1], max(dp[i - 1][j], dp[i][j - 1]));
				else if (a[i - 1] == '?') dp[i][j] = dp[i - 1][j - 1];
				else dp[i][j] = 0;
			}
		}
	if(dp[lena][lenb])
	cout << "true";
	else cout << "false";
}

全部评论

相关推荐

Yki_:以下条件优先录用: 喜欢去缅北当猪仔的
点赞 评论 收藏
分享
一天代码十万三:这都不能算简历吧
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
04-14 18:14
坐标某3线小城市,周休2天半,月工资1800老板给我发信息,我不去,结果她破防了……
职场不咸鱼:这人的意思是这份工作一直1800吗[掉小珍珠了休息也太少了,一天才六十几块钱。。。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务