解题思路:
用map记录字典序,然后暴力遍历每个连续的两个词语,对应位数比较,在判断的时候注意特殊情况,即后一个单词是前一个单词的子集,这个时候要返回false,代码如下:
class Solution {
public:
bool isAlienSorted(vector& words, string order) {
unordered_map mp;
for(int i = 0; i < order.size(); i ++) {
mp[order[i]] = i;
}
for(int i = 0; i < words.size() - 1; i ++) {
string word1 = words[i], word2 = words[i + 1];
int len1 = word1.size(), len2 = word2.size();
int index1 = 0, index2 = 0;
while(index1 < len1 && index2 < len2) {
if(mp[word1[index1]] < mp[word2[index2]]) {
break;
} else if(mp[word1[index1]] > mp[word2[index2]]) {
return false;
}
index1 ++;
index2 ++;
if(index2 == len2 && len1 > len2) {
return false;
}
}
}
return true;
}
};


![LeetCode 953 验证外星词语典[Map] HERODING的LeetCode之路 LeetCode 953 验证外星词语典[Map] HERODING的LeetCode之路](http://www.mshxw.com/aiimages/31/892384.png)
