跳到主要内容

953.验证外星语词典

链接:953.验证外星语词典
难度:Easy
标签:数组、哈希表、字符串
简介:给定一组用外星语书写的单词 words,以及其字母表的顺序 order,只有当给定的单词在这种外星语中按字典序排列时,返回 true;否则,返回 false。

题解 1 - cpp

  • 编辑时间:2021-12-23
  • 执行用时:4ms
  • 内存消耗:9.1MB
  • 编程语言:cpp
  • 解法介绍:转换成地球文进行比较。
class Solution {
public:
bool isAlienSorted(vector<string> &words, string order) {
int nums[30] = {0};
for (int i = 0; i < order.size(); i++) nums[order[i] - 'a'] = i;
for (auto &str : words) {
for (auto &ch : str) {
ch = nums[ch - 'a'] + 'a';
}
}
for (int i = 1; i < words.size(); i++) {
if (words[i] < words[i - 1]) return 0;
}
return 1;
}
};

题解 2 - cpp

  • 编辑时间:2022-05-17
  • 执行用时:4ms
  • 内存消耗:9.1MB
  • 编程语言:cpp
  • 解法介绍:遍历。
class Solution {
public:
bool isAlienSorted(vector<string> &words, string order) {
char map[26] = {0};
for (int i = 0; i < order.size(); i++) map[order[i] - 'a'] = i;
string prev = words[0];
for (int i = 1; i < words.size(); i++) {
if (!check(prev, words[i], map)) return false;
prev = words[i];
}
return true;
}
bool check(string &s1, string &s2, char *map) {
int i1 = 0, n1 = s1.size(), i2 = 0, n2 = s2.size();
while (i1 < n1 && i2 < n2) {
if (map[s1[i1] - 'a'] > map[s2[i2] - 'a']) return false;
if (map[s1[i1] - 'a'] < map[s2[i2] - 'a']) return true;
i1++;
i2++;
}
return i1 == n1;
}
};