翻譯
實現支持“.”和“*”的正則表達式匹配。
“.” 匹配支持單個字符
“*” 匹配零個或多個前面的元素
匹配應該覆蓋到整個輸入的字符串(而不是局部的)。
該函數的原型應該是:
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
網上找來的思路……我沒看懂題目是什麼……
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));
}
}
}