Leetcode44. 通配符匹配(动态规划)

44. 通配符匹配

动态规划

\(f_{i,j}\)为\(s\)匹配\(i\),\(t\)匹配\(j\)是否成功

贪心

相比之下这个思维性更强

考虑两个*,两个星号间的过渡,只需要过渡完到第二个星号,第一个星号匹配多少已经无所谓了

所以贪心的处理已经匹配到的之前的最后一个星号的匹配个数

Code(copy)

class Solution {
public:
    bool isMatch(string s, string p) {

        int i = 0;
        int j = 0;
        int star = -1;
        int k = 0; // 记录最后一次匹配的位置  + 1

        while (i < s.length()) {
            if (s[i] == p[j] || p[j] == '?') {
                ++i;
                ++j;
                continue;
            }

            if (p[j] == '*') {
                star = j++;
                k = i;
                continue;
            }

            // 如果失配了,回溯到 k + 1,即让 * 再多吞噬一个字符。
            if (star != -1) {
                i = ++k;
                j = star + 1;
                continue;
            }
            return false;
        }

        while (j < p.length() && p[j] == '*') ++j;

        return j == p.length();
    }
};

原文地址:https://www.cnblogs.com/y2823774827y/p/11110966.html

时间: 2024-11-09 09:42:50

Leetcode44. 通配符匹配(动态规划)的相关文章

WildcardMatching和Regex,通配符匹配和正则表达式匹配

WildcardMatching:通配符匹配 算法分析: 1. 二个指针i, j分别指向字符串.匹配公式. 2. 如果匹配,直接2个指针一起前进. 3. 如果匹配公式是*,在字符串中依次匹配即可. 注意记录上一次开始比较的位置 Implement wildcard pattern matching with support for '?' and '*' '?' Matches any single character. '*' Matches any sequence of character

[LeetCode] Wildcard Matching 通配符匹配

Implement wildcard pattern matching with support for '?' and '*'. '?' Matches any single character. '*' Matches any sequence of characters (including the empty sequence). The matching should cover the entire input string (not partial). The function p

LeetCode(44): 通配符匹配

Hard! 题目描述: 给定一个字符串 (s) 和一个字符模式 (p) ,实现一个支持 '?' 和 '*' 的通配符匹配. '?' 可以匹配任何单个字符. '*' 可以匹配任意字符串(包括空字符串). 两个字符串完全匹配才算匹配成功. 说明: s 可能为空,且只包含从 a-z 的小写字母. p 可能为空,且只包含从 a-z 的小写字母,以及字符 ? 和 *. 示例 1: 输入: s = "aa" p = "a" 输出: false 解释: "a"

LeetCode 44. 通配符匹配

给定一个字符串 (s) 和一个字符模式 (p) ,实现一个支持 '?' 和 '*' 的通配符匹配. '?' 可以匹配任何单个字符. '*' 可以匹配任意字符串(包括空字符串). 两个字符串完全匹配才算匹配成功. 说明: s 可能为空,且只包含从 a-z 的小写字母. p 可能为空,且只包含从 a-z 的小写字母,以及字符 ? 和 *. 示例 1: 输入: s = "aa" p = "a" 输出: false 解释: "a" 无法匹配 "

LeetCode 44. 通配符匹配(Wildcard Matching)

题目描述 给定一个字符串 (s) 和一个字符模式 (p) ,实现一个支持 '?' 和 '*' 的通配符匹配. '?' 可以匹配任何单个字符. '*' 可以匹配任意字符串(包括空字符串). 两个字符串完全匹配才算匹配成功. 说明: s 可能为空,且只包含从 a-z 的小写字母. p 可能为空,且只包含从 a-z 的小写字母,以及字符 ? 和 *. 示例 1: 输入: s = "aa" p = "a" 输出: false 解释: "a" 无法匹配 &

【BZOJ-3507】通配符匹配 DP + Hash

3507: [Cqoi2014]通配符匹配 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 372  Solved: 156[Submit][Status][Discuss] Description 几乎所有操作系统的命令行界面(CLI)中都支持文件名的通配符匹配以方便用户.最常见的通配符有两个,一个是星号(“”’),可以匹配0个及以上的任意字符:另一个是问号(“?”),可以匹配恰好一个任意字符.现在需要你编写一个程序,对于给定的文件名列表和一个包

bzoj3507【CQOI2014】通配符匹配

3507: [Cqoi2014]通配符匹配 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 309  Solved: 129 [Submit][Status][Discuss] Description 几乎所有操作系统的命令行界面(CLI)中都支持文件名的通配符匹配以方便用户.最常见的通配符有两个,一个 是星号(""'),可以匹配0个及以上的任意字符:另一个是问号("?"),可以匹配恰好一个任意字符. 现在需要你编写

bzoj 3507: [Cqoi2014]通配符匹配

Description 几乎所有操作系统的命令行界面(CLI)中都支持文件名的通配符匹配以方便用户.最常见的通配符有两个,一个是星号(“”’),可以匹配0个及以上的任意字符:另一个是问号(“?”),可以匹配恰好一个任意字符.现在需要你编写一个程序,对于给定的文件名列表和一个包含通配符的字符串,判断哪些文件可以被匹配. Input 第一行是一个由小写字母和上述通配符组成的字符串.第二行包含一个整数n,表示文件个数.接下来n行,每行为一个仅包含小写字母字符串,表示文件名列表. Output 输出n行

[BZOJ3507]通配符匹配

3507: [Cqoi2014]通配符匹配 Time Limit: 10 Sec  Memory Limit: 128 MB Description 几乎所有操作系统的命令行界面(CLI)中都支持文件名的通配符匹配以方便用户.最常见的通配符有两个,一个是星号(""'),可以匹配0个及以上的任意字符:另一个是问号("?"),可以匹配恰好一个任意字符.现在需要你编写一个程序,对于给定的文件名列表和一个包含通配符的字符串,判断哪些文件可以被匹配. Input 第一行是一个