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
| public class Solution { public boolean match(char[] arr, char[] pattern) { if (arr == null && pattern == null) return true;
return helper(arr, 0, pattern, 0); }
private boolean helper(char[] arr, int start, char[] pattern, int patternIndex) { if (start == arr.length && patternIndex == pattern.length) return true; if (start != arr.length && patternIndex == pattern.length) return false;
if (patternIndex + 1 < pattern.length && pattern[patternIndex + 1] == '*') { if ((start != arr.length && pattern[patternIndex] == arr[start]) || (pattern[patternIndex] == '.' && start != arr.length)) { return helper(arr, start, pattern, patternIndex + 2) || helper(arr, start + 1, pattern, patternIndex + 2) || helper(arr, start + 1, pattern, patternIndex); } else { return helper(arr, start, pattern, patternIndex + 2); } } if ((start != arr.length && pattern[patternIndex] == arr[start]) || (pattern[patternIndex] == '.' && start != arr.length)) { return helper(arr, start + 1, pattern, patternIndex + 1); } return false; } }
|