1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
| public class Solution { public boolean match(char[] str, char[] pattern) { return solve(str,pattern,0,0); } private boolean solve(char[] str,char[] pattern,int i,int j){ if(i==str.length){ if(j == pattern.length) return true; else{ if(isEnd(pattern,j)){ return true; }else{ return false; } } } if(j+1 < pattern.length && pattern[j+1]=='*'){ if(judge(str[i],pattern[j])){ return solve(str,pattern,i,j+2) || solve(str,pattern,i+1,j); }else{ return solve(str,pattern,i,j+2); } }else{ if(j < pattern.length && judge(str[i],pattern[j])){ return solve(str,pattern,i+1,j+1); }else{ return false; } } } private boolean isEnd(char[] pattern,int end){ if((pattern.length - end) % 2 == 1){ return false; } for(int offset = 1; end + offset < pattern.length ; offset += 2){ if(pattern[end + offset] != '*') return false; } return true; } private boolean judge(char a, char b){ if(a == b || b == '.'){ return true; }else{ return false; } } }
|