LeetCode OJ--Regular Expression Matching
2024-08-30 07:45:23
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 的情况
这里,大赞啊!
又长智商了。
最新文章
- Redis学习笔记~conf自主集群模式
- win2008远程桌面会话数增加
- 【USACO 3.2.4】饲料调配
- c#中的面向对象基础知识总结
- k个区间相交的段落数 Educational Codeforces Round 4 D
- PHP科普
- MySQL-Select语句高级应用
- 关于:target与定位动画的奇怪现象
- 8. 同步锁Lock
- xamarin C# 安卓实现 ListView 放大缩小
- EventTrigger动态添加监听事件
- .net源码调试 http://referencesource.microsoft.com/
- swift和oc的protocol的成员变量
- 微信小程序新闻列表功能(读取文件、template模板使用)
- ACdream1092
- php安装amqp扩展
- Python 根据地址获取经纬度及求距离
- C# 多线程多文件批量下载---子线程中更新UI 实例
- script标签的crossorigin属性
- Python 爬虫实例(6)—— 爬取蚂蚁免费代理