第一章

1 Strings Homomorphism

  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;
    }
View Code

2 rectangle overlap

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;
}
View Code

3 check word abbreviation

    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;
    }
View Code

4 Word Abbreviation

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;
    }
View Code
原文地址:https://www.cnblogs.com/whesuanfa/p/8087931.html