#include <iostream>
#include <string>
#include <vector>
using namespace std;
bool isMatch(string s, string p)
{
int m = p.length();
int n = s.length();
/*
.*可以匹配0个或多个任意字符。
p中不能有连续两个或多个*。
p中第一个字符不能是*。
*/
vector<vector<bool>> dp(m + 1, vector<bool>(n + 1, false));
dp[0][0] = true;
for (int i = 1; i <= m ; i++)
for (int j = 1; j <= n; j++)
if (s[j - 1] == p[i - 1] || p[i - 1] == '.')
{
if (dp[i - 1][j - 1])
{
dp[i][j] = true;
}
}
else if (p[i - 1] == '*')
{
if (dp[i - 1][j])
{
if (p[i - 2] == '.')
{
for (int k = j - 1; k <= n; k++)
dp[i][k] = true;
}
else
{
dp[i][j - 1] = dp[i][j]= true;
for (int k = j+1 ; k <= n; k++)
if (s[k-1] == p[i - 2])
dp[i][k] = true;
}
}
else
{
if (dp[i - 2][j] )
dp[i][j] = true;
else if (dp[i - 2][0]) //循环中没有处理0。
dp[i][0] = true;
}
}
for (int i = 0; i <= m; i++)
{
for (int j = 0; j <= n; j++)
cout << dp[i][j] << " ";
cout << endl;
}
return dp[m][n];
}
int main()
{
std::cout << isMatch("bbccd","bbbb*c*d");
}