题目链接:953.验证外星语词典
在本篇及之后,一些简单题就不上题目描述了,思路也是略讲而过(没什么可记录的)。
解题思路
先用一个数组重新记录下重排后的字典序,然后根据重排后的字典序,自定义字符串之间的比较函数,遍历所有字符串考察其是否满足按新的字典序升序排列。
具体代码
#include <iostream>
#include <vector>
#include <string>
using namespace std;
class Solution
{
int priority[26]; //记录“外星”字典序
public:
int compare(string &s1, string &s2) //根据字典序进行字符串的比较
{ //返回值为-1: s1<s2; 0: s1=s2; 1: s1>s2;
int m = s1.size();
int n = s2.size();
int i;
for (i = 0; i < min(m, n); i++)
{
if (priority[s1[i] - 'a'] > priority[s2[i] - 'a'])
{
return 1;
}
else if (priority[s1[i] - 'a'] < priority[s2[i] - 'a'])
{
return -1;
}
}
//注意比较到最后一个字符也相等,大小需要根据长度判断。
if (m > n)
{
return 1;
}
else if (m == n)
{
return 0;
}
else if (m < n)
{
return -1;
}
return {};
}
bool isAlienSorted(vector<string> &words, string order)
{
int i;
//记录“外星词典”中26个单词的大小
for (i = 0; i < order.size(); i++)
{
priority[order[i] - 'a'] = i;
}
//遍历比较
int n = words.size();
for (int i = 0; i < n; i++)
{
for (int j = i + 1; j < n; j++)
{
if (compare(words[i], words[j]) == 1)
return false;
}
}
return true;
}
};
时间复杂度:
O
(
n
2
m
)
O(n^2m)
O(n2m),其中
n
n
n为words数组长度,
m
m
m为words中字符串最大长度。
空间复杂度:
O
(
1
)
O(1)
O(1)。