[每日一题]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;
}
}