题目
某种外星语也使用英文小写字母,但可能顺序 order 不同。字母表的顺序(order)是一些小写字母的排列。
给定一组用外星语书写的单词 words,以及其字母表的顺序 order,只有当给定的单词在这种外星语中按字典序排列时,返回 true;否则,返回 false。
排序cmp
刚开始我是想写一个cmp方法 然后放在sort中排序 对比结果的
然后发现sort中的cmp的参数不能乱放
最后只能执行一次循环 比较两两之间的正确性
因为如果两两之间正确 他是不可能产生跨越错误的
//2021.1.22
bool cmp(string a, string b, map<char,int> hash) {
for (int i = 0; i < min(a.size(), b.size()); i++) {
if (a[i] == b[i]) {
continue;
}
else {
return hash[a[i]] < hash[b[i]];//a在b之前
}
}
return a.size() <= b.size();//短的优先
}
bool isAlienSorted(vector<string>& words, string order) {
map<char, int> hash;
for (int i = 0; i < order.size(); i++) {
hash[order[i]] = i;
}
for (int i = 0; i < words.size() - 1; i++) {
if (!cmp(words[i], words[i + 1], hash)) {
return false;
}
}
return true;
}
因为使用了哈希表和两层循环
所以时间空间利用率不高
希望上边我所写的对大家有帮助