http://oj.leetcode.com/problems/regular-expression-matching/

问题给想复杂了,只有p中可以含有. *,s中的字符都是确定的。想了好久,最终还是参考了网上的答案。等我再想想。

#include <iostream>
#include <map>
#include <string>
using namespace std; class Solution {
public:
bool isMatch(const char *s, const char *p)
{
if (s == NULL || p == NULL) return false;
if (*p == '\0') return *s == '\0'; if (*(p + ) == '*')
{
while ((*s != '\0' && *p == '.') || *s == *p)
{
if (isMatch(s, p + )) return true; //aab a*cd
++s;
} return isMatch(s, p + ); //aab c*ab 的情况

}
else if ((*s != '\0' && *p == '.') || *s == *p)
{
return isMatch(s + , p + );
} return false;
}
}; int main()
{
Solution myS;
char *s = "aab";
char *p = "a*cd";
myS.isMatch(s,p);
return ;
}

于是,又试图用自己的解法,来做这道题。

class Solution {
public:
bool isMatch(const char *s, const char *p)
{
if (s == NULL || p == NULL) return false;
int j = ,i = ;
char flagchar = '\0';
while(s[i]!='\0'&&p[j]!='\0')
{
if(s[i] == p[j] )
{
flagchar = s[i];
i++;
j++;
}
else if(p[j] == '.')
{
i++;
j++;
flagchar = '\0';
}
else if(s[i]!= p[j] && p[j]!= '*' && p[j] != '\0' && p[j+]!='\0' && p[j+] == '*')
{
flagchar = p[j];
j+= ;
}
else if(p[j]=='*')
{
if(flagchar == '\0')
flagchar = s[i];
while(p[j+]!='\0'&&p[j+]==flagchar)
j++;
j++;
while(s[i]!='\0'&&s[i]==flagchar)
i++;
}
else
break;
}
if(s[i]=='\0'&&p[j]=='\0')
return true; return false;
}
};

但是在"aaa", "ab*a*c*a"里,挂掉了。发现,当该边的只是规模的时候,确实递归非常好用。在这个地方,确实得递归。

在多种情况匹配不确定的时候,这个尝试

while ((*s != '\0' && *p == '.') || *s == *p)
{
if (isMatch(s, p + 2)) return true; //aab a*cd
++s;
}
return isMatch(s, p + 2); //aab c*ab 的情况

这里,大赞啊!
又长智商了。

最新文章

  1. Redis学习笔记~conf自主集群模式
  2. win2008远程桌面会话数增加
  3. 【USACO 3.2.4】饲料调配
  4. c#中的面向对象基础知识总结
  5. k个区间相交的段落数 Educational Codeforces Round 4 D
  6. PHP科普
  7. MySQL-Select语句高级应用
  8. 关于:target与定位动画的奇怪现象
  9. 8. 同步锁Lock
  10. xamarin C# 安卓实现 ListView 放大缩小
  11. EventTrigger动态添加监听事件
  12. .net源码调试 http://referencesource.microsoft.com/
  13. swift和oc的protocol的成员变量
  14. 微信小程序新闻列表功能(读取文件、template模板使用)
  15. ACdream1092
  16. php安装amqp扩展
  17. Python 根据地址获取经纬度及求距离
  18. C# 多线程多文件批量下载---子线程中更新UI 实例
  19. script标签的crossorigin属性
  20. Python 爬虫实例(6)—— 爬取蚂蚁免费代理

热门文章

  1. Python函数的基本定义和调用以及内置函数
  2. Python入门学习笔记2:刷题
  3. (转)可简化iOS 应用程序开发的6个Xcode小技巧
  4. exp分析
  5. BZOJ 4425: [Nwerc2015]Assigning Workstations分配工作站
  6. python基础学习笔记——字符串方法
  7. tomcat6-输入输出buffer设计
  8. Wannafly模拟赛2
  9. hibernate缓存详解
  10. iOS--自定义相册---对象数组按照时间戳排序