package com.interview.books.leetcodeoj;
/**
* Created_By: stefanie
* Date: 14-12-21
* Time: 下午6:31
*/
public class LOJ44_WildcardMatching {
//keeping the last position of star and matched position in str for backtracing
//1. remember to check p < pattern.length()
//2. when pattern.charAt(p) == '*', starIdx = p, matched = s, p++;
//3. when not match and not '*', and starIdx != -1, p = starIdx + 1, s = ++matched;
//4. remember to go through the end '*' and return p == pattern.length();
public boolean isMatch(String str, String pattern) {
int s = 0, p = 0, starIdx = -1, matched = -1;
while(s < str.length()){
if(p < pattern.length() && (str.charAt(s) == pattern.charAt(p) || pattern.charAt(p) == '?')){
s++;
p++;
} else if(p < pattern.length() && pattern.charAt(p) == '*'){
starIdx = p;
matched = s;
p++;
} else if(starIdx != -1){
p = starIdx + 1;
s = ++matched;
} else {
return false;
}
}
while(p < pattern.length() && pattern.charAt(p) == '*') p++;
return p == pattern.length();
}
}