953. Verifying an Alien Dictionary

To solve this problem, we need two steps:

1. Convert "order" string to a Hashmap, the key is the characor in the "order" string, value is its index.

2. Compare the words to check whether they are sorted correctly.

But how to compare multiple words? It's hard to compare multiple words, but it's very easy to compare two words, right? Then we can compare two words at a time.

The solution's Time complexity is O(m+n), m is the order's length, and n is words' length.

    Map<Character, Integer> map = new HashMap<>();

    public boolean isAlienSorted(String[] words, String order) {

        for (int i = 0; i < order.length(); i++) {
            map.put(order.charAt(i), i);
        }
        for (int i = 1; i < words.length; i++) {
            if (!compare(words[i - 1], words[i], map))
                return false;
        }
        return true;
    }

    private boolean compare(String w1, String w2, Map<Character, Integer> map) {
        int m = w1.length(), n = w2.length();
        int i = 0, j = 0;
        while (i < m && j < n) {
            if (map.get(w1.charAt(i)) < map.get(w2.charAt(j))) {   //the most important step, if c1<c2, then return this method immediately, don't have to compare the following characters any more.
                return true;
            } else if (map.get(w1.charAt(i)) == map.get(w2.charAt(j))) {
                i++;
                j++;
            } else {
                return false;
            }
        }
        return m <= n;  //compare the length
    }

 

上一篇:送给大家一个很好的Web前端开发工具


下一篇:nginx php-fpm 输出php错误日志