class Solution {
public boolean isAlienSorted(String[] words, String order) {
int[] new_alphabet = new int[26];
for(int i=0; i<order.length();i++){
new_alphabet[order.charAt(i)-'a'] = i;
}
for(int i=0;i<words.length;i++){
for(int j=i+1;j<words.length;j++){
int min = Math.min(words[i].length(), words[j].length());
for(int k=0;k<min;k++){
char ichar = words[i].charAt(k);
char jchar = words[j].charAt(k);
if(new_alphabet[ichar-'a']<new_alphabet[jchar-'a']){
break;
}
if(new_alphabet[jchar-'a']<new_alphabet[ichar]-'a'){
return false;
}
else if(k==min-1&&words[i].length()>words[j].length()){
return false;
}
}
}
}
return true;
}
}
希望有人能让我离开。我已经检查了几次此代码,但仍然不知道我在哪里错了。
java运行时错误:第17行:java.lang.ArrayIndexOutOfBoundsException:索引119的长度为26超出范围
答案 0 :(得分:0)
检查:
for(int i=0;i<words.length;i++){
for(int j=i+1;j<words.length;j++){
如果i
到最后一个索引,则j
将是i + 1
。因此j
将
尝试索引超出限制的一个。
因此,外循环应转到words.length - 1
。
应该正确了。
for(int i=0;i<words.length-1;i++) {
for(int j=i+1;j<words.length;j++){
您也犯了这个错误
if(new_alphabet[jchar-'a']<new_alphabet[ichar]-'a'){
return false;
}
应为[ichar - 'a']