[LintCode] 正则表达式匹配

C++字符串匹配算法实现
本文详细阐述了使用C++实现字符串匹配算法的过程,通过动态规划的方法解决模式串与目标串之间的匹配问题。
 1 class Solution {
 2 public:
 3     /**
 4      * @param s: A string 
 5      * @param p: A string includes "." and "*"
 6      * @return: A boolean
 7      */
 8     bool isMatch(const char *s, const char *p) {
 9         // write your code here
10         int m = strlen(s), n = strlen(p);
11         vector<vector<bool> > dp(m + 1, vector<bool> (n + 1, false));
12         dp[0][0] = true;
13         for (int j = 1; j <= n; j++)
14             dp[0][j] = (j > 1 && p[j - 1] == '*' && dp[0][j - 2]);
15         for (int j = 1; j <= n; j++) {
16             for (int i = 1; i <= m; i++) {
17                 if (j > 1 && p[j - 1] == '*') 
18                     dp[i][j] = dp[i][j - 2] || ((s[i - 1] == p[j - 2] || p[j - 2] == '.') && dp[i - 1][j]);
19                 else dp[i][j] = dp[i - 1][j - 1] && (s[i - 1] == p[j - 1] || p[j - 1] == '.');
20             }
21         }
22         return dp[m][n];
23     }
24 };

 

转载于:https://www.cnblogs.com/jcliBlogger/p/4623303.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值