package com.interview.algorithms.string; /** * Created_By: stefanie * Date: 14-7-19 * Time: 下午2:02 */ public class C11_18_StringWildcardMatch { public static boolean match(String expr, String str){ return match(expr, str, 0, 0); } private static boolean match(String expr, String str, int i, int j){ if(i >= expr.length()) return true; if(i < expr.length() && j >= str.length()) return false; if(expr.charAt(i) == '*'){ return match(expr, str, i, j+1) || match(expr, str, i+1, j) || match(expr, str, i+1, j+1); } else if(expr.charAt(i) == str.charAt(j)){ return match(expr, str, i+1, j+1); } else return false; } public static boolean isMatch(String pattern, String str){ return isMatch(pattern, str, 0, 0); } private static boolean isMatch(String pattern, String str, int i, int j){ if(pattern.charAt(i) == str.charAt(j)){ i++; j++; if(i >= pattern.length() && j >= str.length()) return true; if(i < pattern.length() && j < str.length()) return isMatch(pattern, str, i, j); else return false; } else { if(pattern.charAt(i) == '*'){ if(++i >= pattern.length()) return true; boolean isMatch = false; while(++j < str.length() && !isMatch) { isMatch = isMatch(pattern, str, i, j); }; return isMatch; } else { return false; } } } }