Wildcard Matching

来源:互联网 发布:苹果免费数据恢复软件 编辑:程序博客网 时间:2024/06/08 04:03

'?' 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") → falseisMatch("aa","aa") → trueisMatch("aaa","aa") → falseisMatch("aa", "*") → trueisMatch("aa", "a*") → trueisMatch("ab", "?*") → trueisMatch("aab", "c*a*b") → false

Recursion not passing OJ:

    public boolean isMatch(String s, String p) {        if (p.length() == 0) {            return s.length() == 0;        }        if (s.length() == 0) {            if (p.charAt(0) == '*') {                return isMatch(s, p.substring(1));            } else {                return false;            }        }        if (p.charAt(0) == '*') {            for (int i = 0; i <= s.length(); i++) {                if (isMatch(s.substring(i), p.substring(1))) {                    return true;                }            }        } else {            if ((s.charAt(0) == p.charAt(0) || p.charAt(0) == '?')) {                if (isMatch(s.substring(1), p.substring(1))) {                    return true;                }            }        }        return false;    }

Passing OJ: 

http://blog.csdn.net/perfect8886/article/details/22689147

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



0 0
原创粉丝点击