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

正则表达式匹配

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

import "strconv"
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param str string字符串 
 * @param pattern string字符串 
 * @return bool布尔型
*/
func match( s string ,  p string ) bool {
    return dp(s, 0, p, 0)
}
func dp(s string,  i int, p string, j int) bool {
    m, n := len(s), len(p)
    if j == n {
        return i == m
    }
    if i == m {
        if (n-j) % 2 == 1 {
            return false
        }
        for ; j + 1 < n; j += 2 {
            if p[j+1] != '*' {
                return false
            }
        }
        return true    
    }
    key := strconv.Itoa(i) + "," + strconv.Itoa(j)
    memo := map[string]bool{}
    if memo[key] == true {
        return memo[key]
    }
    res := false
    if s[i] == p[j] || p[j] == '.' {
        if j + 1 < n && p[j+1] == '*' {
            res = dp(s, i, p, j+2) || dp(s, i+1, p, j)
        }else {
            res = dp(s, i+1, p, j+1)
        }
    }else {
        if j + 1 < n && p[j+1] == '*' {
            res = dp(s, i, p, j+2)
        }else {
            return false
        }
    }
    memo[key] = res
    return res
}















全部评论

相关推荐

Ivew:好像没啥问题,你没签,其他人签了,人招满了不招正常做法。
点赞 评论 收藏
分享
10-07 23:57
已编辑
电子科技大学 Java
八街九陌:博士?客户端?开发?啊?
点赞 评论 收藏
分享
本人末二本,C++后端选手,目前手里两个意向:美团移动端和字节客户端。但全网都是劝退客户端的,不知道要不要接。但现在转java已经没办法赶上秋招了,很焦虑,不知道要不要转java备战春招,求各位大佬给给建议。
小破站_程序员YT:作为一个末二本,c++后端选手,手握两个大厂意向,你竟然还在犹豫要不要接,还要去转java? 真不知道你怎么想的。不知道有多少人羡慕你还来不及。
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务