[英]Checking if an array of string is sorted lexicographically case insensitive
我正在写一个方法,该方法将输入字符串数组和整数n
作为输入。 该方法将检查直到长度n
之前的字符串是否按字典顺序排列。 我的代码为每个输入都返回false,我不知道为什么!
public static boolean isStringArraySorted(String[] strs, int n) {
boolean answer=true;
for (String word : strs) {
for(int i=1; i<strs.length; i++) {
String check1 =word.substring(0,n);
String check2= strs[i].substring(0,n);
if ( check1.compareToIgnoreCase(check2) > 0 )
return false;
}
}
return answer;
}
将您的循环更改为此:
for (int j=0; j<strs.length; j++){
for(int i=j+1; i<strs.length; i++){
String word = strs[j];
String check1 =word.substring(0,n);
String check2= strs[i].substring(0,n);
if (check1.compareToIgnoreCase(check2)>0)
return false;
}
}
由于您做错的关键是您的第二个循环从错误的位置开始。
因为您在整个数组的内部for循环中进行迭代,而您仅应从单词开始进行迭代。
for (int j=1; j<strs.length; j++){
for(int i=j+1; i<strs.length; i++){
String word = strs[j];
String check1 =word.substring(0,n);
String check2= strs[i].substring(0,n);
if (check1.compareToIgnoreCase(check2)>0)
return false;
}
}
正如我在评论中提到的,您只需要一个循环即可解决此问题:
public static boolean isStringArraySorted(String[] strs, int n) {
for (int i = 0; i < strs.length - 1; i++) {
String first = substring(strs[i], n);
String second = substring(strs[i + 1], n);
if (first.compareToIgnoreCase(second) > 0) {
return false;
}
}
return true;
}
private static String substring(String s, int n) {
return s.substring(0, n > s.length() ? s.length() - 1 : n);
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.