[leetcode] 44. Wildcard Matching 解题报告

14 篇文章 0 订阅
13 篇文章 0 订阅

题目链接: https://leetcode.com/problems/wildcard-matching/

Implement wildcard pattern matching with support for '?' and '*'.

'?' Matches any single character.
'*' Matches any sequence of characters (including the empty sequence).

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", "*") → true
isMatch("aa", "a*") → true
isMatch("ab", "?*") → true
isMatch("aab", "c*a*b") → false

思路: 有两种特殊字符, '?'代表匹配一个任意字符, 这个比较好处理. '*'匹配任意多个字符, 这个需要考虑匹配多个字符. 因此我们可以记下最后出现'*'的位置, 这样当后面位置不匹配的时候再回到这里将不匹配的字符用'*'来匹配. 这样最后再判断是否p指针停留的位置到最后都是*, 如果是的话则可以匹配, 否则不可以匹配. 一个例子如: s = "aa", p = "aa****".

代码如下:

class Solution {
public:
    bool isMatch(string s, string p) {
        int preS=-1, preP=-1, i=0, j=0, len1=s.size(), len2=p.size();
        while(i < len1)
        {
            if(s[i]==p[j] || p[j]=='?') i++, j++;
            else if(p[j]=='*') preS=i+1, preP = j++;
            else if(preP==-1) return false;
            else i = preS, j = preP;
        }
        while(p[j]=='*') j++;
        return i==len1&&j==len2;
    }
};
参考: https://leetcode.com/discuss/49254/fastest-non-dp-solution-with-o-1-space


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值