剑指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),已完结!!!