0953. Verifying an Alien Dictionary

0953. Verifying an Alien Dictionary #

题目 #

  • 某种外星语也使用英文小写字母,但可能顺序 order 不同。字母表的顺序(order)是一些小写字母的排列。
  • 给定一组用外星语书写的单词 words,以及其字母表的顺序 order,只有当给定的单词在这种外星语中按字典序排列时,返回 true;否则,返回 false

思路 #

模拟 #

自定义排序 #

代码 #

模拟 #

class Solution {
    public boolean compareWords(String word1, String word2, Map<Character, Integer> map) {
        int ptr1 = 0, ptr2 = 0;

        while (ptr1 < word1.length() && ptr2 < word2.length()) {
            int order1 = map.get(word1.charAt(ptr1)), order2 = map.get(word2.charAt(ptr2));
            
            if (order1 > order2) return false;
            if (order1 < order2) return true;

            ptr1++; ptr2++;
        }

        return ptr1 == word1.length();
    }
    
    public boolean isAlienSorted(String[] words, String order) {
        Map<Character, Integer> map = new HashMap<>();
        for (int i = 0; i < order.length(); i++) map.put(order.charAt(i), i);

        boolean ans = true;
        for (int i = 0; i + 1 < words.length; i++) ans &= compareWords(words[i], words[i+1], map);
        return ans;
    }
}

致谢 #

宫水三叶