当前位置:首页 > 未命名 > 正文内容

【解题报告】【lintcode192】Wildcard Matching

u3blog9年前 (2016-05-18)未命名389

题意

判断两个可能包含通配符“?”和“”的字符串是否匹配。匹配规则如下: '?' 可以匹配任何单个字符。 '' 可以匹配任意字符串(包括空字符串)。 两个串完全匹配才算匹配成功。 一些例子: isMatch("aa","a") → false isMatch("aa","aa") → true isMatch("aaa","aa") → false isMatch("aa", "") → true isMatch("aa", "a") → true isMatch("ab", "?") → true isMatch("aab", "ca*b") → false

解答

对于'?'的匹配很简单,直接忽略即可 对于''的匹配,找到这个符号时,记录它的位置和匹配串的位置,在下一次开始时从这个点后开始匹配,如果不匹配就在匹配串上面往后移一位 以上过程结束后,对于匹配串的遍历就结束了,如果模式串还有未遍历的部分,只能是

代码

 public boolean isMatch(String str, String pattern){
        int s = 0;
        int p = 0;
        int starIndex = -1;
        int match = 0;
        while (s < str.length()){
            if (p<pattern.length()&&(pattern.charAt(p) == '?'||pattern.charAt(p) == str.charAt(s))){
                p++;
                s++;
            }else if(p < pattern.length()&&pattern.charAt(p) == '*'){
                starIndex = p;
                p++;
                match = s;
            }else if(starIndex != -1){
                match++;
                s = match;
                p = starIndex+1;
            }else{
                return false;
            }
        }
        while (p<pattern.length()&&pattern.charAt(p) == '*')
            p++;
       return p == pattern.length();
    }

扫描二维码推送至手机访问。

版权声明:本文由u3blog发布,如需转载请注明出处。

本文链接:https://u3blog.xyz/?id=421

分享给朋友:

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。