码迷,mamicode.com
首页 > 其他好文 > 详细

leetcode——44.通配符匹配

时间:2020-07-05 19:23:22      阅读:60      评论:0      收藏:0      [点我收藏+]

标签:mamicode   concat   string   tco   ==   bool   alt   预处理   load   

自己哼哧哼哧做了好久,两个多小时,终于完成了。。。

技术图片

 

 

public boolean isMatch(String s, String p) {
        //对p进行预处理
        int j = 0;
        while (j+1<p.length()){
            if(p.charAt(j) == ‘*‘ && p.charAt(j+1) == ‘*‘){
                p = p.substring(0,j+1).concat(p.substring(j+2));
            }else{
                j++;
            }
        }
        return isMatched(s,p);

    }

    private boolean isMatched(String s, String p) {
        if(!p.contains("*") && !p.contains("?")){
            return p.equals(s);
        }
        if(s.length() == 0){
            if(p.length() == 1){
                return p.equals("*");
            }else if(p.charAt(0) == ‘*‘){
                return isMatched(s,p.substring(1));
            }else{
                return false;
            }
        }
        int i = 0,j = 0;
        while(i<s.length() && j<p.length()){
            if(s.charAt(i) == p.charAt(j) || p.charAt(j) == ‘?‘){
                i++;
                j++;
            }else if(p.charAt(j) == ‘*‘){
                if(p.substring(j+1).contains("*")) {
                    if(j+1<p.length()) {
                        j++;
                    }else{
                        return true;
                    }
                    int k = j;
                    while (j < p.length() && p.charAt(j) != ‘*‘ && p.charAt(j) != ‘?‘) {
                        j++;
                    }
                    if(k == j){
                        return isMatched(s.substring(i),p.substring(j)) || isMatched(s.substring(i+1),p.substring(j));
                    }
                    if (s.substring(i).contains(p.substring(k, j))) {
                        int t = s.substring(i).indexOf(p.substring(k, j))+i;
                        return isMatched(s.substring(t + j - k), p.substring(j));
                    }else{
                        return false;
                    }
                }else{
                    return isMatched(s.substring(i+1),p.substring(j)) || isMatched(s.substring(i+1),p.substring(j+1)) || isMatched(s.substring(i),p.substring(j+1));
                }
           
            }else if(s.charAt(i) != p.charAt(j)){
                return false;
            }
        }
        if(i == s.length()) {
            while (j < p.length()) {
                if (p.charAt(j) == ‘*‘) {
                    j++;
                } else {
                    return false;
                }
            }
        }
        return i == s.length() && j == p.length();
    }

看了别人的答案,尚且需要好好领悟

public boolean isMatch(String s, String p) {
        int iStar = -1, jStar = -1, m = s.length(), n = p.length(), i = 0, j = 0;
        while (i < m) {
            if (j < n && (s.charAt(i) == p.charAt(j) || p.charAt(j) == ‘?‘)) {
                i++;
                j++;
            } else if (j < n && p.charAt(j) == ‘*‘) {
                iStar = i;
                jStar = j;
                j++;
            } else if (iStar >= 0) {
                i = ++iStar;
                j = jStar + 1;
            } else {
                return false;
            }
        }
        while (j < n && p.charAt(j) == ‘*‘) j++;
        return j == n;
    }

——2020.7.5

leetcode——44.通配符匹配

标签:mamicode   concat   string   tco   ==   bool   alt   预处理   load   

原文地址:https://www.cnblogs.com/taoyuxin/p/13246878.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!