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的主要内容,如果未能解决你的问题,请参考以下文章