您的位置:首页 > 其它

LeetCode OJ --- Regular Expression Matching

2016-03-22 12:10 465 查看

题目描述

Implement regular expression matching with support for ‘.’ and ‘*’.

‘.’ Matches any single character.

‘*’ Matches zero or more of the preceding element.

The matching should cover the entire input string (not partial).

The function prototype should be:

bool isMatch(const char *s, const char *p)

Some examples:

isMatch(“aa”,”a”) → false

isMatch(“aa”,”aa”) → true

isMatch(“aaa”,”aa”) → false

isMatch(“aa”, “a*”) → true

isMatch(“aa”, “.*”) → true

isMatch(“ab”, “.*”) → true

isMatch(“aab”, “c*a*b”) → true

Code(c++)

//法一:
bool isMatch(string s, string p) {
int slen = s.length();
int plen = p.length();
if(slen == 0){
for(int i = 0; i < plen; ++i)
if(p[i] != '*' && p[i] != '.')
return false;
return true;
}
if(plen == 0)
return false;

if(plen == 1 || p[1] != '*'){
if(p[0] == s[0] || p[0] == '.')
return isMatch(s.substr(1), p.substr(1));
else
return false;
}
else{
int i = 0;
while(i <= slen &&
!isMatch(s.substr(i), p.substr(2)))
i++;
if(i > slen)
return false;
return true;
}
}


//法二:
bool isMatch(string s, string p) {
int slen = s.length();
int plen = p.length();
if(slen == 0){
for(int i = 0; i < plen; ++i)
if(p[i] != '*' && p[i] != '.')
return false;
return true;
}
if(plen == 0)
return false;

if(plen == 1 || p[1] != '*'){
if(p[0] == s[0] || p[0] == '.')
return isMatch(s.substr(1), p.substr(1));
else
return false;
}
else{
if(p[0] == s[0] || p[0] == '.')
return isMatch(s, p.substr(2)) ||
isMatch(s.substr(1), p);
else
return isMatch(s, p.substr(2));
}
}


note:

这种匹配类题目,最快想到的方法应该就是用递归的方式来解决
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: