剑指offer(leetcode 10.) 正则表达式匹配

Posted Zy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了剑指offer(leetcode 10.) 正则表达式匹配相关的知识,希望对你有一定的参考价值。

 

 这题一年前就做过,当时刚开始刷leetcode,提交了几十次过不去,就放那没管了。今天剑指offer又遇到这题,终于做出来了,用的dp。

 1 class Solution {
 2 public:
 3     bool isMatch(string s, string p) {
 4         int s_len=s.size(),p_len=p.size();
 5         vector<vector<bool>> dp(s_len+1,vector<bool>(p_len+1,false));
 6         //dp[i][j]表示s[0,i-1]和p[0,j-1]能否匹配
 7         dp[0][0]=true;//空串匹配空串
 8         for(int i=1;i<=p_len;++i){
 9             dp[0][i]=i>1 and p[i-1]==\'*\' and dp[0][i-2];
10         }
11         for(int i=1;i<=s_len;++i){
12             for(int j=1;j<=p_len;++j){
13                 if(p[j-1]==\'*\'){
14                     if(p[j-2]!=\'.\'){//数字+\'*\'
15                         dp[i][j]=dp[i][j-2] or (s[i-1]==p[j-2] and (dp[i-1][j-2] or dp[i-1][j-1]));
16                     }
17                     else{//\'.\'+\'*\'
18                         for(int k=i;k>= 0;--k){
19                             if(dp[k][j-2]){
20                                 dp[i][j]=true;
21                                 break;
22                             }
23                         }
24                     }
25                 }
26                 else if(p[j-1]==\'.\'){
27                     dp[i][j]=dp[i-1][j-1];
28                 }
29                 else{//数字
30                     dp[i][j]=p[j-1]==s[i-1] and dp[i-1][j-1];
31                 }
32             }
33         }
34         return dp.back().back();
35     }
36 };

 

以上是关于剑指offer(leetcode 10.) 正则表达式匹配的主要内容,如果未能解决你的问题,请参考以下文章

AcWing 30. 正则表达式匹配 (剑指OFFER leetcode 10)

LeetCode(剑指 Offer)- 19. 正则表达式匹配

力扣(LeetCode)剑指offer刷题笔记(java),已完结!!!

力扣(LeetCode)剑指offer刷题笔记(java),已完结!!!

算法---- Leetcode剑指offer-Java版题解

算法---- Leetcode剑指offer-Java版题解