Advertisement
1988coder

291. Word Pattern II

Nov 30th, 2018
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.74 KB | None | 0 0
  1. /*
  2. Refer: https://leetcode.com/problems/word-pattern-ii/discuss/73664/Share-my-Java-backtracking-solution
  3.  
  4. Time Complexity:
  5. T(N) = T(N-1) + O(M)
  6. T(N) = N*M + 1 = O(N*M)
  7.  
  8. Space Complexity: O(N + M)
  9.  
  10. N = Length of pattern
  11. M = Length of string
  12. */
  13. class Solution {
  14.     public boolean wordPatternMatch(String pattern, String str) {
  15.         if (pattern == null || str == null) {
  16.             return false;
  17.         }
  18.         if (pattern.length() == 0 && str.length() == 0) {
  19.             return true;
  20.         }
  21.        
  22.         return isMatch(str, 0, pattern , 0, new HashMap<Character, String>(), new HashSet<String>());
  23.     }
  24.    
  25.     public boolean isMatch(String str, int i, String pat, int j, Map<Character, String> map, Set<String> set) {
  26.         if (i == str.length() && j == pat.length()) {
  27.             return true;
  28.         }
  29.         if (i == str.length() || j == pat.length()) {
  30.             return false;
  31.         }
  32.        
  33.         char curP = pat.charAt(j);
  34.        
  35.         if (map.containsKey(curP)) {
  36.             String s = map.get(curP);
  37.            
  38.             if (!str.startsWith(s, i)) {
  39.                 return false;
  40.             }
  41.            
  42.             return isMatch(str, i+s.length(), pat, j+1, map, set);
  43.         }
  44.        
  45.         for (int k = i; k < str.length(); k++) {
  46.             String s = str.substring(i, k+1);
  47.            
  48.             if (set.contains(s)) {
  49.                 continue;
  50.             }
  51.            
  52.             map.put(curP, s);
  53.             set.add(s);
  54.            
  55.             if(isMatch(str, k+1, pat, j+1, map, set)) {
  56.                 return true;
  57.             }
  58.            
  59.             map.remove(curP);
  60.             set.remove(s);
  61.         }
  62.        
  63.         return false;
  64.     }
  65. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement