10. Regular Expression Matching-hard
2016-02-28 22:42
281 查看
本来采用递归的方法来做,结果超时——网上找的其他人的题解没有不超时的C++代码,都是C或者Java:
别人的C版本递归:
bool isMatch(const char *s, const char *p)
{
if(s == NULL && p == NULL) return true;
if(s == NULL || p == NULL) return false;
if(*p == ‘\0’) return *s == ‘\0’;
if((p+1) == ‘‘)
{
//.* —-> .[……]
while(*s == *p || (*s != ‘\0’ && *p == ‘.’))
{
if(isMatch(s, p+2))
return true;
++s;
}
return isMatch(s, p+2);
}else if(*s == *p || (*s != ‘\0’ && *p == ‘.’))
return isMatch(s+1, p+1);
return false;
}
动态规划解法:
class Solution { public: //to verify whether s and p=='x*' is matched bool match(string s, string p){ if(s.size() == 0 || p[0] == '.'){ return true; }else{ if(s[0] == p[0]) return match(s.substr(1), p); } } bool isMatch(string s, string p) { if (p.size() == 0) return (s.size() == 0); if (p.size() >= 2 && p[1] == '*'){ for(int i = 0; i <= s.size(); i ++){ if(match(s.substr(0, i), p.substr(0, 2))){ if (isMatch(s.substr(i), p.substr(2))) return true; } } return false; }else{ if(s.size() > 0 && (s[0] == p[0] || p[0] == '.')){ return isMatch(s.substr(1), p.substr(1)); }else return false; } } };
别人的C版本递归:
bool isMatch(const char *s, const char *p)
{
if(s == NULL && p == NULL) return true;
if(s == NULL || p == NULL) return false;
if(*p == ‘\0’) return *s == ‘\0’;
if((p+1) == ‘‘)
{
//.* —-> .[……]
while(*s == *p || (*s != ‘\0’ && *p == ‘.’))
{
if(isMatch(s, p+2))
return true;
++s;
}
return isMatch(s, p+2);
}else if(*s == *p || (*s != ‘\0’ && *p == ‘.’))
return isMatch(s+1, p+1);
return false;
}
动态规划解法:
相关文章推荐
- Password Validation using regular expressions(JavaScript)
- 数据包解析(基于wireshark)——物理层Frame
- PL/SQL之函数处理
- 字符集和编码
- 【CodeForces 520E】Pluses everywhere
- Java的Calendar使用
- VM虚拟机centos中的网络站点、主机访问
- java.lang.NoSuchFieldError: android.support.v7.appcompat.R$styleable.Theme_w的解决办法
- hdu 1063 Exponentiation/poj 1001
- FFmpeg获取视频的旋转角度rotate函数,一定能获取!(要放在解析视频流的时候才能获取)
- JavaScript 定义类或对象
- HDU 1596 也是最小路径Dijkstra
- 3-8-循环队列-栈和队列-第3章-《数据结构》课本源码-严蔚敏吴伟民版
- web前端排版
- GitHub教程
- android第三方登录数据库设计以及业务数据流向说明
- 静态数据的初始化
- Java冒泡排序和二分查找(预习)
- Java常见日期格式及日期的计算工具类
- 面试(必知必会)-sizeof()+strlen()函数浅析