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