leetcode-通配符匹配(动态规划)-74

Posted 天津 唐秙

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode-通配符匹配(动态规划)-74相关的知识,希望对你有一定的参考价值。

题目要求
  给定一个字符串 (s) 和一个字符模式 § ,实现一个支持 ‘?’ 和 ‘*’ 的通配符匹配。
  ’ ? ’ 可以匹配任何单个字符。
  ’ * ’ 可以匹配任意字符串(包括空字符串)。
图解

代码实现

#include <iostream>
#include <string>
#include <vector>
using namespace std;

class Solution {
public:
	bool isMatch(string s, string p) {
		int len1 = s.size();//m
		int len2 = p.size();//n

		vector<vector<int>> dp(len1 + 1, vector<int>(len2 + 1));
		dp[0][0] = 1;
		for (int i = 1; i <= len2; i++)//
		{
			if (p[i - 1] == '*')
			{
				dp[0][i] = 1;
			}
			else
			{
				break;
			}
		}

		for (int i = 1; i <= len1; i++)
		{
			if (s[i - 1] == '*')
			{
				dp[i][0] == 1;
			}
			else
			{
				break;
			}
		}

		for (int i = 1; i <= len1; i++)
		{
			for (int j = 1; j <= len2; j++)
			{
				if (p[j - 1] == '*')
				{
					dp[i][j] = dp[i][j - 1] | dp[i - 1][j];
				}
				else if (s[i - 1] == p[j - 1] || p[j - 1] == '?')
				{
					dp[i][j] = dp[i - 1][j - 1];
				}
				else{
					dp[i][j] = 0;
				}
			}
		}

		return dp[len1][len2];
	}
};

int main()
{
	string str1 = "aa";
	string str2 = "*";
	Solution a;
	int ret = a.isMatch(str1, str2);
	cout << ret << endl;

	return 0;
}

以上是关于leetcode-通配符匹配(动态规划)-74的主要内容,如果未能解决你的问题,请参考以下文章

Go 刷 LeetCode 系列:动态规划通配符

动态规划:leetcode题库第四十四题

干货|leetcode部分动态规划记录贴

leetcode 44 通配符匹配(dp)

动态规划法解通配符匹配算法题

395,动态规划解通配符匹配问题