题目地址:
https://leetcode.com/problems/verifying-an-alien-dictionary/
给定一个单词列表,再给定一个新的字母表,问该单词列表按照新的字母表的顺序是否是有序的。
思路是先将新的顺序的字母和位置记录下来,然后用这个顺序来比较相邻的单词,如果存在两个相邻的单词反序,则直接返回false;否则遍历完后返回true。代码如下:
class Solution {
public:
bool isAlienSorted(vector<string>& ws, string ord) {
unordered_map<char, int> mp;
for (int i = 0; i < ord.size(); i++) mp[ord[i]] = i;
auto f = [&](string& s, string& t) {
for (int i = 0; i < s.size() && i < t.size(); i++)
if (s[i] != t[i]) return mp[s[i]] < mp[t[i]];
return s.size() <= t.size();
};
for (int i = 0; i + 1 < ws.size(); i++)
if (!f(ws[i], ws[i + 1])) return false;
return true;
}
};
时间复杂度 O ( n l ) O(nl) O(nl), l l l为单词最长长度,空间 O ( 1 ) O(1) O(1)。