翻译
实现支持“.”和“*”的正则表达式匹配。
“.” 匹配支持单个字符
“*” 匹配零个或多个前面的元素
匹配应该覆盖到整个输入的字符串(而不是局部的)。
该函数的原型应该是:
bool isMatch(const char * s,const char * p)
示例:
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
原文
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
C#,递归
public class Solution
{
public bool IsMatch(string s,string p)
{
if (p.Length == @H_301_170@0)
return s.Length == @H_301_170@0;
if (p.Length == @H_301_170@1)
return (s.Length == @H_301_170@1) && (p[@H_301_170@0] == s[@H_301_170@0] || p[@H_301_170@0] == '.');
if (p[@H_301_170@1] != '*')
{
if (s.Length == @H_301_170@0)
return false;
else
return (s[@H_301_170@0] == p[@H_301_170@0] || p[@H_301_170@0] == '.')
&& IsMatch(s.Substring(@H_301_170@1),p.Substring(@H_301_170@1));
}
else
{
while (s.Length > @H_301_170@0 && (p[@H_301_170@0] == s[@H_301_170@0] || p[@H_301_170@0] == '.'))
{
if (IsMatch(s,p.Substring(@H_301_170@2)))
return true;
s = s.Substring(@H_301_170@1);
}
return IsMatch(s,p.Substring(@H_301_170@2));
}
}
}