Advertisement
1988coder

87. Scramble String

Oct 8th, 2018
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.80 KB | None | 0 0
  1. class Solution {
  2.     public boolean isScramble(String s1, String s2) {
  3.         if (s1 == null || s2 == null || s1.length() == 0 || s2.length() == 0 || s1.length() != s2.length()) {
  4.             return false;
  5.         }
  6.         if (s1.equals(s2)) {
  7.             return true;
  8.         }
  9.        
  10.         HashMap<String, Boolean> pairs = new HashMap<>();
  11.        
  12.         return helper(pairs, s1, s2);
  13.     }
  14.    
  15.     public boolean helper(HashMap<String, Boolean> pairs, String s1, String s2) {
  16.         String pair = s1 + '#' + s2;
  17.        
  18.         if (pairs.containsKey(pair)) {
  19.             return pairs.get(pair);
  20.         }
  21.        
  22.         if (s1.equals(s2)) {
  23.             pairs.put(pair, true);
  24.             return true;
  25.         }
  26.         HashMap<Character, Integer> map = new HashMap<>();
  27.         for (int i = 0; i < s1.length(); i++) {
  28.             char c1 = s1.charAt(i);
  29.             char c2 = s2.charAt(i);
  30.             map.put(c1, map.getOrDefault(c1, 0) + 1);
  31.             map.put(c2, map.getOrDefault(c2, 0) - 1);
  32.         }
  33.        
  34.         for (Map.Entry<Character, Integer> e : map.entrySet()) {
  35.             if (e.getValue() != 0) {
  36.                 pairs.put(pair, false);
  37.                 return false;
  38.             }
  39.         }
  40.        
  41.         for (int i = 1; i < s1.length(); i++) {
  42.             if (helper(pairs, s1.substring(0,i), s2.substring(0,i)) && helper(pairs, s1.substring(i), s2.substring(i))) {
  43.                 pairs.put(pair, true);
  44.                 return true;
  45.             }
  46.             if (helper(pairs, s1.substring(0,i), s2.substring(s2.length()-i)) && helper(pairs, s1.substring(i), s2.substring(0,s2.length()-i))) {
  47.                 pairs.put(pair, true);
  48.                 return true;
  49.             }
  50.         }
  51.         pairs.put(pair, false);
  52.         return false;
  53.     }
  54. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement