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
[]
1 public boolean isMatch(String s, String p) { 2 int sLen = s.length(), pLen = p.length(); 3 int i = 0, j = 0; 4 int ss = 0, starP = -1; 5 while (i < sLen) { 6 7 while(j < pLen && p.charAt(j) == '*'){ 8 starP = j++; 9 ss = i; 10 } 11 12 if((j == pLen) || (s.charAt(i) != p.charAt(j) && p.charAt(j) != '?')){ 13 if(starP < 0){ 14 return false; 15 } else { 16 j = starP + 1; 17 i = ++ss; 18 } 19 } else{ 20 i++; 21 j++; 22 } 23 24 25 } 26 while (j < pLen && p.charAt(j) == '*') { 27 j++; 28 } 29 return j == pLen; 30 }
http://blog.sina.com.cn/s/blog_b9285de20101gw2x.html
http://yucoding.blogspot.com/2013/02/leetcode-question-123-wildcard-matching.html