某种外星语也使用英文小写字母,但可能顺序 order 不同。字母表的顺序(order)是一些小写字母的排列。
给定一组用外星语书写的单词 words,以及其字母表的顺序 order,只有当给定的单词在这种外星语中按字典序排列时,返回 true;否则,返回 false。
示例 1:
输入:words = [\"hello\",\"leetcode\"], order = \"hlabcdefgijkmnopqrstuvwxyz\" 输出:true 解释:在该语言的字母表中,\'h\' 位于 \'l\' 之前,所以单词序列是按字典序排列的。
示例 2:
输入:words = [\"word\",\"world\",\"row\"], order = \"worldabcefghijkmnpqstuvxyz\" 输出:false 解释:在该语言的字母表中,\'d\' 位于 \'l\' 之后,那么 words[0] > words[1],因此单词序列不是按字典序排列的。
示例 3:
输入:words = [\"apple\",\"app\"], order = \"abcdefghijklmnopqrstuvwxyz\" 输出:false 解释:当前三个字符 \"app\" 匹配时,第二个字符串相对短一些,然后根据词典编纂规则 \"apple\" > \"app\",因为 \'l\' > \'∅\',其中 \'∅\' 是空白字符,定义为比任何其他字符都小(更多信息)。
提示:
- 1 <= words.length <= 100
- 1 <= words[i].length <= 20
- order.length == 26
- 在 words[i] 和 order 中的所有字符都是英文小写字母。
map<char, int> dict;
bool cmp(string x, string y)
{
int i =0, j = 0;
int len1 = x.size();
int len2 = y.size();
while (i < len1 && j < len2)
{
if (x[i] == y[j])
{
i++;
j++;
}
else if (dict[x[i]] > dict[y[i]])
{
return false;
}
else
{
return true;
}
}
return i == j ? true : i > j ? false : true;
}
class Solution {
public:
bool isAlienSorted(vector<string>& words, string order)
{
for (int i = 0; i < 26; i++)
{
dict[order[i]] = i;
}
vector<string> newAry = words;
sort(newAry.begin(), newAry.end(), cmp);
for (int i = 0; i < words.size(); i++)
{
if (newAry[i] != words[i])
return false;
}
return true;
}
};
继续阅读与本文标签相同的文章
上一篇 :
OpenAlpr车牌识别功能实现
下一篇 :
纸包不住火,印度承认核电站曾被恶意软件入侵
-
韩国公布500亿美元计划 大力发展电动和自动驾驶汽车
2026-05-18栏目: 教程
-
原来这样做可以提高自媒体短视频的播放量?
2026-05-18栏目: 教程
-
用了3年以上的iPhone手机,应该这样清理手机缓存,很实用
2026-05-18栏目: 教程
-
一文弄懂,锁的基本概念到Redis分布式锁实现
2026-05-18栏目: 教程
-
阿里云混合云备份如何还原虚拟机备份?
2026-05-18栏目: 教程
