zoukankan      html  css  js  c++  java
  • 【leetcode】Wildcard Matching(hard) ★ 大神太牛了

    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

    我的思路:不提了,太挫了,写了100多行代码都没搞定,直接看大神10行搞定的代码吧:

    其实主要的问题就在于p中的*究竟代表哪几个字母,大神的代码中用ss记录*代表字母的后面一个位置,star记录p中*的位置。

    先假设*代表0个字符,如果后面发现不成立,再返回来

    设*代表1个字符,............................

    bool isMatch(const char *s, const char *p) {
            const char* star=NULL;
            const char* ss=s;
            while (*s){
                //advancing both pointers when (both characters match) or ('?' found in pattern)
                //note that *p will not advance beyond its length 
                if ((*p=='?')||(*p==*s)){s++;p++;continue;} 
    
                // * found in pattern, track index of *, only advancing pattern pointer 
                if (*p=='*'){star=p++; ss=s;continue;} 
    
                //current characters didn't match, last pattern pointer was *, current pattern pointer is not *
                //only advancing pattern pointer
                if (star){ p = star+1; s=++ss;continue;} 
    
               //current pattern pointer is not star, last patter pointer was not *
               //characters do not match
                return false;
            }
    
           //check for remaining characters in pattern
            while (*p=='*'){p++;}
    
            return !*p;  
        }
  • 相关阅读:
    MongoDB 释放磁盘空间 db.runCommand({repairDatabase: 1 })
    RK 调试笔记
    RK Android7.1 拨号
    RK Android7.1 移植gt9271 TP偏移
    RK Android7.1 定制化 itvbox 盒子Launcher
    RK Android7.1 双屏显示旋转方向
    RK Android7.1 设置 内存条作假
    RK Android7.1 设置 蓝牙 已断开连接
    RK Android7.1 进入Camera2 亮度会增加
    RK 3128 调触摸屏 TP GT9XX
  • 原文地址:https://www.cnblogs.com/dplearning/p/4172888.html
Copyright © 2011-2022 走看看