Wildcard Matching 字符串含?,*匹配

原创 2015年07月06日 19:57:25

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
class Solution {
public:

/*
//递归解法,会TLE。
    bool isMatch(string s, string p) {
        
        int sLen=s.size();
        int pLen=p.size();
        // if (pLen > 30000) return false; // the trick
        if(pLen==0)
            return sLen==0;
        
        if(p[0]=='*')  
        {
            while(p[0]=='*')
                p=p.substr(1);
            while(sLen>0)
            {
                if(isMatch(s,p))
                    return true;
                sLen--;
                s=s.substr(1);
            }
            return isMatch(s,p);
        }
        else if(p[0]==s[0] || (sLen>0 && p[0]=='?'))
            return isMatch(s.substr(1),p.substr(1));
        
        return false;
    }
 */
    
     bool isMatch(string s, string p) {
        int sLen=s.size();
        int pLen=p.size();
        
        int i=0,j=0,pi=0,pj=pLen;
        
        while(i<sLen)
        {
            if(s[i]==p[j]||p[j]=='?')
            {
                i++;
                j++;
                continue;
            }
            
            if(p[j]=='*'){
                pj=j++;
                pi=i;
                continue;
            }
            
            if(pj<pLen){
                j=pj+1;//j是*后面的字符,i从pi开始逐个匹配
                i=++pi;
                continue;
            }
            return false;
        }
       while(p[j]=='*'){
           j++;
       }
       return j==pLen;
    }
};
版权声明:本文为博主原创文章,未经博主允许不得转载。

通配符匹配字符串 Wildcard Matching

问题:实现支持?和*两个通配符的字符串匹配函数。 Implement wildcard pattern matching with support for '?' and '*'. '?' Matc...
  • luckyjoy521
  • luckyjoy521
  • 2014年03月31日 22:09
  • 1695

[Elasticsearch] 部分匹配 (一) - 前缀查询

部分匹配(Partial Matching) 敏锐的读者可能已经发现到目前为止,介绍的查询都是在整个词条层面进行操作的。匹配的最小单元必须是一个词条。你只能找到存在于倒排索引(Inverted ...
  • dm_vincent
  • dm_vincent
  • 2014年12月18日 10:04
  • 31317

[Elasticsearch] 部分匹配 (二) - 通配符及正则表达式查询

通配符和正则表达式查询 wildcard查询和prefix查询类似,也是一个基于词条的低级别查询。但是它能够让你指定一个模式(Pattern),而不是一个前缀(Prefix)。它使用标准的s...
  • dm_vincent
  • dm_vincent
  • 2014年12月19日 10:27
  • 32278

通配符匹配字符串 Wildcard Matching

问题:实现支持?和*两个通配符的字符串匹配函数。 Implement wildcard pattern matching with support for '?' and '*'. '?' Matc...
  • luckyjoy521
  • luckyjoy521
  • 2014年03月31日 22:09
  • 1695

Leetcode Wildcard Matching 字符串*?模式匹配

大数据的测试样例是非常偷懒的一串aaaaaaaaaaaaaaaaaaa,所以采用回溯的方法与
  • magicmwt
  • magicmwt
  • 2014年09月29日 13:26
  • 127

String、动态规划——wildcard-matching 通配符匹配

Implement wildcard pattern matching with support for'?'and'*'. '?' Matches any single character. '*'...
  • jingsuwen1
  • jingsuwen1
  • 2016年05月13日 13:09
  • 223

Wildcard Matching 通配符匹配

题目要求: Implement wildcard pattern matching with support for '?' and '*'. '?' Matches any single cha...
  • ysc6688
  • ysc6688
  • 2015年05月21日 12:28
  • 280

[Lintcode]Wildcard Matching 通配符匹配

Implement wildcard pattern matching with support for '?' and '*'. '?' Matches any single characte...
  • jc69186918
  • jc69186918
  • 2017年07月11日 22:54
  • 106

LeetCode 44. Wildcard Matching(模糊匹配)

原题网址:https://leetcode.com/problems/wildcard-matching/ Implement wildcard pattern matching with sup...
  • jmspan
  • jmspan
  • 2016年05月21日 04:07
  • 423

Wildcard Matching:通配符匹配

Implement wildcard pattern matching with support for '?' and '*'. '?' Matches any single character....
  • u013300579
  • u013300579
  • 2017年12月13日 08:28
  • 41
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Wildcard Matching 字符串含?,*匹配
举报原因:
原因补充:

(最多只允许输入30个字)