第一章
1 Strings Homomorphism
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
public boolean isIsomorphic(String s, String t) { // write your code here char[] ss = s.toCharArray(); char[] tt = t.toCharArray(); char[] num1 = new char[256]; for (int i = 0; i < ss.length; i++) { if (num1[ss[i]] == 0) { num1[ss[i]] = tt[i]; } else { if (num1[ss[i]] != tt[i]) { return false; } } } Arrays.fill(num1, (char)0); for (int i = 0; i < tt.length; i++) { if (num1[tt[i]] == 0) { num1[tt[i]] = ss[i]; } else { if (num1[tt[i]] != ss[i]) { return false; } } } return true; }
2 rectangle overlap
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
public class Cache { boolean doOverlap(Point l1, Point r1, Point l2, Point r2) { if (l1.x > r2.x || l2.x > r1.x) { return false; } if (l1.y < r2.y || l2.y < r1.y) { return false; } return true; } } class Point{ int x, y; }
3 check word abbreviation
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
boolean validWordAbbreviation(String word, String abbr) { int i = 0, j = 0; char[] s = word.toCharArray(); char[] t = abbr.toCharArray(); while (i < s.length && j < t.length) { if (Character.isDigit(t[j])) { if (t[j] == '0') { return false; } int val = 0; while (j < t.length && Character.isDigit(t[j])) { val = val * 10 + t[j] - '0'; j++; } i = i + val; } else { if (s[i++] != t[j++]) { return false; } } } return i == s.length && j == t.length; }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
String[] WordAbbreviation(String[] words) { int n = words.length; int[] count = new int[n]; String[] ans = new String[n]; Map<String, Integer> map = new HashMap<>(); for (int i = 0; i < words.length; i++) { count[i] = 1; ans[i] = pref(words[i], 1); map.put(ans[i], map.getOrDefault(ans[i], 0) + 1); } while (true) { boolean unique = true; for (int i = 0; i < n; i++) { if (map.get(ans[i]) > 1) { count[i]++; ans[i] = pref(words[i], count[i]); map.put(ans[i], map.getOrDefault(ans[i], 0) + 1); unique = false; } } if (unique) { break; } } return ans; } private String pref(String str, int k) { if (k >= str.length() - 2) { return str; } String res = str.substring(0, k) + (str.length() - k - 1) + str.charAt(str.length() - 1); return res; }