LeetCode 五月打卡-day17
Posted 王六六的IT日常
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 五月打卡-day17相关的知识,希望对你有一定的参考价值。
953. 验证外星语词典
题目描述:
某种外星语也使用英文小写字母,但可能顺序 order
不同。字母表的顺序(order
)是一些小写字母的排列。
给定一组用外星语书写的单词 words
,以及其字母表的顺序 order
,只有当给定的单词在这种外星语中按字典序排列时,返回 true
;否则,返回 false
。
参考题解:
【宫水三叶】简单自定义排序模拟题
为了快速判断某两个字符在字典序的前后关系,先使用一个大小与字符集(在本题当中就是26个英文字母)相等的数组对 order 进行转存。
然后对 words 进行拷贝复制得到 clone,并执行自定义排序,最后根据排序前后顺序是否相等来返回答案。
class Solution
public boolean isAlienSorted(String[] words, String order)
int[] ord = new int[26];
for (int i = 0; i < 26; i++)
ord[order.charAt(i) - 'a'] = i;
//对 words 进行拷贝复制
String[] clone = words.clone();
//自定义排序
Arrays.sort(clone, (a, b)->
int n = a.length(), m = b.length();
int i = 0, j = 0;
while (i < n && j < m)
int c1 = a.charAt(i) - 'a', c2 = b.charAt(j) - 'a';
if (c1 != c2)
return ord[c1] - ord[c2];
i++;
j++;
if (i < n) return 1;
if (j < m) return -1;
return 0;
);
int n = words.length;
for (int i = 0; i < n; i++)
if (!clone[i].equals(words[i])) return false;
return true;
方法二:直接遍历
class Solution
public boolean isAlienSorted(String[] words, String order)
int[] index = new int[26];
for (int i = 0; i < order.length(); ++i)
index[order.charAt(i) - 'a'] = i;
for (int i = 1; i < words.length; i++)
boolean valid = false;
for (int j = 0; j < words[i - 1].length() && j < words[i].length(); j++)
int prev = index[words[i - 1].charAt(j) - 'a'];
int curr = index[words[i].charAt(j) - 'a'];
if (prev < curr)
valid = true;
break;
else if (prev > curr)
return false;
if (!valid)
/* 比较两个字符串的长度 */
if (words[i - 1].length() > words[i].length())
return false;
return true;
以上是关于LeetCode 五月打卡-day17的主要内容,如果未能解决你的问题,请参考以下文章