Description:
‘.’ 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
题目理解:给两个字符串,用第二个字符串去匹配第一个字符串,意思就是第一个字符串中的字符不转义, 只有第二个字符串才需要转义。
需要注意的是,一个字符后面如果跟上*
,那么这个字符一定要转义,也就是例如a*
与a*
不能匹配,因为第一个a*
不转义,
第二个a*
转义,所以第一个a*
中的*
将匹配不上。
思路:几个月之前,显然不知道动态规划,就直接递归,非常二。当然也能击败一半人…
刚看了动态规划,这个问题典型的动态规划问题,使用自顶向下的策略,速度得到提升。
代码一:直接递归版本
1 | public class Solution { |
复杂度:指数级别。
运行时间:33ms。
击败:44.25%。
代码二:动态规划(自顶向下)
1 | public class Solution { |
复杂度:O(n^2)???
运行时间:25ms。
击败:99.48%