码迷,mamicode.com
首页 > 其他好文 > 详细

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

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

标签:inf   今天   code   back   mamicode   mat   cto   ==   info   

技术图片

 

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

标签:inf   今天   code   back   mamicode   mat   cto   ==   info   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!