zoukankan      html  css  js  c++  java
  • LeetCode题解-----Wildcard Matching

    题目描述:

    '?' 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

    分析:这道题有点类似与简单的正则表达式引擎。我们用两个指针分别标记s和p,若当前位置的元素匹配,则两个指针都向右移动一个数。如果遇到'*',则p的指针指向后面不为'*'的第一个字符,再对s和p当前的指针位置做一个标记,标记为preS,preP,我们可以认为在当前指针之前的s和p是匹配的(感觉像动态规划的思想)。如果不匹配,则分两种情况进行讨论:1、前面有'*',则先将PreS++,再将两个指针分别移回preS和preP,其实就是匹配失败,移向下一位再比较一次 2、前面没有'*',则匹配失败,返回false。最后,当s的指针指向最末尾,则比较结束。如果p的指针之后还有非'*'的字符,则匹配失败,否则匹配成功。

    代码:

    bool isMatch(char* s, char* p) {
        int indexS=0,indexP=0;
        int preS,preP;
        bool star=false;
        
        while(indexS<strlen(s)) {
            if(p[indexP]=='?') {
                indexS++,indexP++;
            } else if(p[indexP]==s[indexS]){
                indexS++,indexP++;
            } else if(p[indexP]=='*') {
                star=true;
                while(p[indexP]=='*') {
                    indexP++;
                }
                if(indexP==strlen(p)) {
                    return true;
                }
                preS=indexS;
                preP=indexP;
            } else {
                if(star==false) {
                    return false;
                }
                preS++;
                indexS=preS;
                indexP=preP;
            }
        }
        while(p[indexP]=='*') {
            indexP++;
        }
        if(indexP==strlen(p)) {
            return true;
        } else {
            return false;
        }
        
    }
    

      

  • 相关阅读:
    openldap
    Java实现 洛谷 P1200 [USACO1.1]你的飞碟在这儿Your Ride Is He…
    Java实现 洛谷 P1200 [USACO1.1]你的飞碟在这儿Your Ride Is He…
    Java实现 洛谷 P2141 珠心算测验
    Java实现 洛谷 P2141 珠心算测验
    Java实现 洛谷 P2141 珠心算测验
    Java实现 洛谷 P2141 珠心算测验
    Java实现 洛谷 P2141 珠心算测验
    Java实现 洛谷 P1567 统计天数
    Java实现 洛谷 P1567 统计天数
  • 原文地址:https://www.cnblogs.com/YaoDD/p/5323695.html
Copyright © 2011-2022 走看看