首页 > 其他 > 详细

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

时间:2020-02-11 09:37:02      阅读:66      评论:0      收藏:0      [点我收藏+]

技术分享图片

 

 这题一年前就做过,当时刚开始刷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.) 正则表达式匹配

原文:https://www.cnblogs.com/FdWzy/p/12293663.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!