题解 | #正则表达式匹配#

正则表达式匹配

https://www.nowcoder.com/practice/28970c15befb4ff3a264189087b99ad4

using System;
using System.Collections.Generic;
using System.Text;

class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param str string字符串 
     * @param pattern string字符串 
     * @return bool布尔型
     */
    public bool match (string str, string pattern) {
        pattern = preProcess(pattern);
        Console.WriteLine(pattern);
        
        bool[,] dp = new bool[str.Length + 1, pattern.Length + 1];
        dp[0,0] = true;
        for(int i = 0; i <= str.Length; i++){
            Console.WriteLine();
            Console.WriteLine("i:" + i + " ");
            for(int j = 1; j <= pattern.Length; j++){
                if(pattern[j - 1] == '*'){
                    j++;
                    dp[i, j] = (j >= 2 && dp[i, j - 2]) || (i > 0 && dp[i - 1, j] && (str[i - 1] == pattern[j - 1] || (pattern[j - 1] == '.')));

                }
                else{
                    if(pattern[j - 1] == '.' && i > 0) dp[i, j] = dp[i - 1, j - 1];
                    else if(i > 0 && str[i - 1] == pattern[j - 1]) dp[i, j] = dp[i - 1, j - 1];
                }
                Console.Write("j:"+ j + " " + "bool:" + dp[i,j]);
            }
        }
        return dp[str.Length, pattern.Length];
    }

    public string preProcess(string pattern){
        StringBuilder sb = new StringBuilder(pattern);
        int i = 0;
        while(i < sb.Length){
            if(sb[i] == '*'){
                char a = sb[i - 1];
                sb[i] = sb[i - 1];
                sb[i - 1] = '*';
                if(a == '.'){
                    i++;
                    continue;
                }
                //while(i + 1 < sb.Length && (sb[i + 1] == a || sb[i + 1] == '*')) sb.Remove(i + 1, 1);
            }
            i++;
        }
        return sb.ToString();
    }
}

全部评论

相关推荐

xdm怎么说&nbsp;要被拷打了&nbsp;担心是KPI
丹田:面就完了,就当日薪四位数的大佬免费给给你面试。
点赞 评论 收藏
分享
叶扰云倾:进度更新,现在阿里云面完3面了,感觉3面答得还行,基本都答上了,自己熟悉的地方也说的比较细致,但感觉面试官有点心不在焉不知道是不是不想要我了,求阿里收留,我直接秒到岗当阿里孝子,学校那边的房子都退租了,下学期都不回学校,全职猛猛实习半年。这种条件还不诱人吗难道 然后现在约到了字节的一面和淘天的复活赛,外加猿辅导。华为笔试完没动静。 美团那边之前投了个base广州的,把我流程卡麻了,应该是不怎么招人,我直接简历挂了,现在进了一个正常的后端流程,还在筛选,不知道还有没有hc。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务