{
  "type": "code_options",
  "author": "csdn.net",
  "source": "solution.md",
  "exercise_id": "f5858af2c1894e0795b638c7eaa40bb9",
  "keywords": "递归,字符串,动态规划",
  "title": "正则表达式匹配",
  "desc": [
    {
      "content": "\n<p>给你一个字符串 <code>s</code> 和一个字符规律 <code>p</code>，请你来实现一个支持 <code>'.'</code> 和 <code>'*'</code> 的正则表达式匹配。</p><ul>\t<li><code>'.'</code> 匹配任意单个字符</li>\t<li><code>'*'</code> 匹配零个或多个前面的那一个元素</li></ul><p>所谓匹配，是要涵盖 <strong>整个 </strong>字符串 <code>s</code>的，而不是部分字符串。</p><p><strong>示例 1：</strong></p><pre><strong>输入：</strong>s = \"aa\" p = \"a\"<strong><br />输出：</strong>false<strong><br />解释：</strong>\"a\" 无法匹配 \"aa\" 整个字符串。</pre><p><strong>示例 2:</strong></p><pre><strong>输入：</strong>s = \"aa\" p = \"a*\"<strong><br />输出：</strong>true<strong><br />解释：</strong>因为 '*' 代表可以匹配零个或多个前面的那一个元素, 在这里前面的元素就是 'a'。因此，字符串 \"aa\" 可被视为 'a' 重复了一次。</pre><p><strong>示例 3：</strong></p><pre><strong>输入：</strong>s = \"ab\" p = \".*\"<strong><br />输出：</strong>true<strong><br />解释：</strong>\".*\" 表示可匹配零个或多个（'*'）任意字符（'.'）。</pre><p><strong>示例 4：</strong></p><pre><strong>输入：</strong>s = \"aab\" p = \"c*a*b\"<strong><br />输出：</strong>true<strong><br />解释：</strong>因为 '*' 表示零个或多个，这里 'c' 为 0 个, 'a' 被重复一次。因此可以匹配字符串 \"aab\"。</pre><p><strong>示例 5：</strong></p><pre><strong>输入：</strong>s = \"mississippi\" p = \"mis*is*p*.\"<strong><br />输出：</strong>false</pre><p> </p><p><strong>提示：</strong></p><ul>\t<li><code>0 <= s.length <= 20</code></li>\t<li><code>0 <= p.length <= 30</code></li>\t<li><code>s</code> 可能为空，且只包含从 <code>a-z</code> 的小写字母。</li>\t<li><code>p</code> 可能为空，且只包含从 <code>a-z</code> 的小写字母，以及字符 <code>.</code> 和 <code>*</code>。</li>\t<li>保证每次出现字符 <code>*</code> 时，前面都匹配到有效的字符</li></ul>",
      "language": "markdown"
    }
  ],
  "answer": [
    {
      "content": "",
      "language": "cpp"
    }
  ],
  "prepared": [
    [
      {
        "content": "",
        "language": "cpp"
      }
    ],
    [
      {
        "content": "",
        "language": "cpp"
      }
    ],
    [
      {
        "content": "",
        "language": "cpp"
      }
    ]
  ],
  "template": {
    "content": "bool isMatch(char *s, char *p)\n{\n\tif (!p || p[0] == NULL)\n\t\treturn (!s || s[0] == NULL);\n\tbool head_match = (s && s[0] && (s[0] == p[0] || p[0] == '.'));\n\tif (p[1] && p[1] == '*')\n\t{\n\t\treturn (head_match && isMatch(s + 1, p)) || isMatch(s, p + 2);\n\t}\n\telse\n\t{\n\t\treturn head_match && isMatch(s + 1, p + 1);\n\t}\n}",
    "language": "cpp"
  },
  "node_id": "dailycode-3a1bc738c17a4209a24f20e6284146dd",
  "license": "csdn.net",
  "created_at": 1637894159,
  "topic_link": "https://bbs.csdn.net/topics/600470835"
}