力扣LCR034 验证外星语词典:字典序验证算法详解
一、问题理解
题目要求验证给定的单词列表是否按照自定义字母顺序(外星语字典序)排列。这与常规英文字典序验证类似,但字母顺序可能完全不同。
二、算法设计
建立字母顺序映射:将外星语字母顺序转换为数值映射,便于比较
逐对比较单词:检查相邻单词是否符合字典序
处理边界情况:如空单词、相同单词等情况
三、C++实现代码
#include <vector>
#include <string>
#include <unordered_map>
using namespace std;
bool isAlienSorted(vector<string>& words, string order) {
// 建立字母到顺序值的映射
unordered_map<char, int> orderMap;
for (int i = 0; i < order.size(); ++i) {
orderMap[order[i]] = i;
}
// 比较每对相邻单词
for (int i = 0; i < words.size() - 1; ++i) {
string word1 = words[i];
string word2 = words[i + 1];
// 找到第一个不同的字母进行比较
int minLen = min(word1.size(), word2.size());
int j = 0;
for (; j < minLen; ++j) {
if (word1[j] != word2[j]) {
if (orderMap[word1[j]] > orderMap[word2[j]]) {
return false;
}
break;
}
}
// 如果前面字母都相同,但第一个单词更长,则无效
if (j == minLen && word1.size() > word2.size()) {
return false;
}
}
return true;
}四、代码解释
orderMap:存储每个字母在外星语中的顺序值
相邻单词比较:逐个字母比较,直到找到不同字母
特殊情况处理:处理前缀相同但长度不同的情况
原创内容 转载请注明出处

