力扣打卡:953. 验证外星语词典
解题思路
思路
- 使用HashMap统计字典的顺序
- 从头开始,每次只比较两个字符串
- 循环比较,最后得到结果
解释
每次比较两个字符串,只有两种情况
- 从头开始比较字符
- 如果字符相等,那么继续查看下一个字符
- 如果字符不相等,那么使用HashMap得到字典的顺序,前一个字符串的字符的字典顺序是否大于后一个字符串的字符的字典顺序
- 如果不相等,那么直接返回false
- 如果相等,那么判断后一个字符是否为前一个字符的子串,不包含等长的子串
第一个字符串和第二个字符串的比较结果
- 如果为正确,那么第二个和第三个进行比较,也就相当于利用了第一个和第二个的比较结果
- 如果不正确,那么直接返回false
正如 查看给定的一组字符串的最长的前缀,每次只需要比较两个字符串,得到的结果就是前缀,而后与下一个字符串继续进行比较
代码
class Solution {
public boolean isAlienSorted(String[] words, String order) {
// 使用HashMap统计字典的顺序
int idx = 0 ;
HashMap<Character,Integer> map = new HashMap<>();
for(char c : order.toCharArray()) map.put(c,idx++);
for(int i=1; i<words.length; i++){
String s1 = words[i-1];
String s2 = words[i];
int len = Math.min(s1.length(), s2.length());
for(int j=0; j<len; j++){
char c1 = s1.charAt(j);
char c2 = s2.charAt(j);
if(c1!=c2){
if(map.get(c1) > map.get(c2)) return false;
break;
}
else if(j+1==len && s1.length()!=len && s2.length()==len) return false;
}
}
return true;
}
}