字符串匹配问题

1. 参考文章http://www.leetcode.com/2011/09/regular-expression-matching.html

2. 代码

View Code
 1 #include <iostream>
 2 #include <cassert>
 3 
 4 using namespace std;
 5 
 6 
 7 //递归很重要
 8 bool isMatch(const char* sor,const char* des)
 9 {
10     assert(sor && des);
11     //到达字符串末尾
12     if (*des=='\0')
13     {
14         return *sor=='\0';
15     }
16     //des当前字符的下一个字符不是‘*’
17     if (*(des+1)!='*')
18     {
19         assert(*des!='*');
20         //满足条件,则递归比较下一个字符
21         if ((*des==*sor) || ((*des=='.')&&(*sor!='\0')))
22         {
23             return isMatch(sor+1,des+1);
24         }
25     }
26     //如果下一个字符是'*',并且满足while条件
27     while ((*des==*sor) || (*des=='.' && *sor!='\0') )
28     {
29         if (isMatch(sor,des+2))
30         {
31             return true;
32         }
33         sor++;
34     }
35     //如果下一个字符是'*',并且不满足while条件
36     return isMatch(sor,des+2);
37 }
38 
39 int main()
40 {
41     cout<<isMatch("aa","a")<<endl;
42     cout<<isMatch("aa","aa")<<endl;
43     cout<<isMatch("aaa","aa")<<endl;
44     cout<<isMatch("aa","a*")<<endl;
45     cout<<isMatch("aa",".*")<<endl;
46     cout<<isMatch("ab",".*")<<endl;
47     cout<<isMatch("aab","c*a*b")<<endl;
48 }

3. 注意问题:

  (1)递归求解问题的重要性

  (2)深入了解题目的意思及要求

  (3)各种情况考虑清楚

  (4)学习题目中简洁的代码书写方式

转载于:https://www.cnblogs.com/ZJUKasuosuo/archive/2012/07/21/2602035.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值