题目
某种外星语也使用英文小写字母,但可能顺序 order 不同。字母表的顺序(order)是一些小写字母的排列。
给定一组用外星语书写的单词 words,以及其字母表的顺序 order,只有当给定的单词在这种外星语中按字典序排列时,返回 true;否则,返回 false。
样例
思路
- 重写字母表 和 比较器
- 具体源码如下:
这是 string类的compareTo方法。可以看出,字母表是按照英文字母 26个单词,进行比较,因此我们只需要重写字母表 和 比较器即可
public int compareTo(String anotherString) {
int len1 = value.length;
int len2 = anotherString.value.length;
int lim = Math.min(len1, len2);
char v1[] = value;
char v2[] = anotherString.value;
int k = 0;
while (k < lim) {
char c1 = v1[k];
char c2 = v2[k];
if (c1 != c2) {
return c1 - c2;
}
k++;
}
return len1 - len2;
}
AC代码
class Solution {
char[] weightChar = new char[26];
char index = 'a';
public boolean isAlienSorted(String[] words, String order) {
for (int i = 0; i < order.length(); i++) {
weightChar[order.charAt(i) - 'a'] = index++;
}
for (int i = 0; i < words.length - 1; i++) {
String before = words[i];
String after = words[i + 1];
if (compareTo(before, after) > 0) {
return false;
}
}
return true;
}
public int compareTo(String before, String after) {
char[] v1 = before.toCharArray();
char[] v2 = after.toCharArray();
int lim = Math.min(before.length(),after.length());
int k = 0 ;
while(k < lim){
char c1 = weightChar[v1[k] - 'a'];
char c2 = weightChar[v2[k] - 'a'];
if(c1 != c2){
return c1 - c2;
}
k++;
}
return before.length() - after.length();
}
}
|