剑指 Offer 19. 正则表达式匹配

剑指 Offer 19. 正则表达式匹配,第1张

剑指 Offer 19. 正则表达式匹配 题目

正则表达式匹配

C++代码
class Solution {
public:
    bool isMatch(string s, string p) {
        int m = s.size(), n = p.size();
        vector> dp(m + 1, vector(n + 1, false));
        dp[0][0] = true;
        for(int i = 1; i <= n; i++){
            if(p[i - 1] == '*')
                dp[0][i] = dp[0][i - 2];
        }
        for(int i = 1; i <= m; i++){
            for(int j = 1; j <= n; j++){
                if(s[i - 1] == p[j - 1] || p[j - 1] == '.')
                    dp[i][j] = dp[i - 1][j - 1];
                else if(p[j - 1] == '*'){
                    if(s[i - 1] != p[j - 2] && p[j - 2] != '.')
                        dp[i][j] = dp[i][j - 2];
                    else
                        dp[i][j] = dp[i][j - 2] || dp[i - 1][j];
                }
            }
        }
        return dp[m][n];
    }
};
Java代码
class Solution {
    public boolean isMatch(String s, String p){
        int m = s.length(), n = p.length();
        boolean[][] dp = new boolean[m + 1][n + 1];
        dp[0][0] = true;
        for(int i = 1; i <= n; i++){
            if(p.charAt(i - 1) == '*')
                dp[0][i] = dp[0][i - 2];
        }
        for(int i = 1; i <= m; i++){
            for(int j = 1; j <= n; j++){
                if(s.charAt(i - 1) == p.charAt(j - 1) || p.charAt(j - 1) == '.')
                    dp[i][j] = dp[i - 1][j - 1];
                else if(p.charAt(j - 1) == '*'){
                    if(s.charAt(i - 1) != p.charAt(j - 2) && p.charAt(j - 2) != '.')
                        dp[i][j] = dp[i][j - 2];
                    else
                        dp[i][j] = dp[i - 1][j] || dp[i][j - 2];
                }
            }
        }
        return dp[m][n];
    }
}
联系方式

如果有任何问题可以邮箱联系我:raymondlam1@yeah.net

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5699384.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存