前天用递归LTE,昨天用动态规划LTE,今天接着搞,改用贪心法。题目再放一次:
'?'匹配任意字符,'*'匹配任意长度字符串
Some examples: isMatch("aa","a") → false isMatch("aa","aa") → true isMatch("aaa","aa") → false isMatch("aa", "*") → true isMatch("aa", "a*") → true isMatch("ab", "?*") → true isMatch("aab", "c*a*b") → false
The function prototype should be: bool isMatch(const char *s, const char *p)
思路其实更简单,和递归的有点像,两个字符串从头开始匹配,不匹配直接返回false,匹配,则两个指针都加1,若p遇到*,则s++一直到匹配到p+1,当然要记录此时p和s的位置,以便下次回溯.
还是用图片说明吧:
用该方法,最差情况下复杂度为len_s*len_p,绝大情况下其实小很多.具体代码如下:
class Solution { public: bool isMatch(const char *s, const char *p) { const char *last_s = NULL; const char *last_p = NULL; while ('