[每日一题]953.验证外星语词典

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

举例:

输入:words = [“hello”,”leetcode”], order = “hlabcdefgijkmnopqrstuvwxyz” 输出:true 解释:在该语言的字母表中,’h’ 位于 ‘l’ 之前,所以单词序列是按字典序排列的。

输入:words = [“word”,”world”,”row”], order = “worldabcefghijkmnpqstuvxyz” 输出:false 解释:在该语言的字母表中,’d’ 位于 ‘l’ 之后,那么 words[0] > words[1],因此单词序列不是按字典序排列的。

解释说明:

 * 1. 字符串数组内两两单词比对两单词不同第一个字母符合字母表顺序就算比对完成
 * 2. 字符串数组内两两单词比对两单词左半部分相同忽略相同的部分比对之后的一个字母符合字母表顺序就行
 * 3. 字符串数组内两两单词比对其中一个单词是另一个单词的子集判断字符串长度长度符合升序排序

Solution

class Solution {
    public boolean isAlienSorted(String[] words, String order) {
        for (int i = 0; i < words.length - 1; i++) {
            int n = words[i].length();
            int m = words[i + 1].length();
            int min = n < m ? n : m;
            int j = 0;
            for (; j < min; j++) {
                // 判断是否满足第 1,2 种情况
                if (order.indexOf(words[i].charAt(j)) 
                    > order.indexOf(words[i + 1].charAt(j))) {
                    return false;
                } 
                
                if (order.indexOf(words[i].charAt(j)) 
                    < order.indexOf(words[i + 1].charAt(j))) {
                    break;
                }
            }
            // 判断是否满足第 3 种情况
            if (j == min && n > m) {
                return false;
            }
        }
        return true;
    }
}