将字符串添加到数组,以确定是否通过增加字符串的长度来对列表进行排序。如果不是,则打印违反此类顺序的第一个元素的索引。 如果数组中的字符串不同,则一切正常,例如,输入
113
13476
Neutral
wa
答案:索引(wa)3输出。
但是如果是这样的话:
123
12345
123
答案:索引(123)-0,但正确的答案是索引2
public class Solution {
public static void main(String[] args) throws IOException {
Scanner scan = new Scanner(System.in);
ArrayList<String> list = new ArrayList<>();
for (int i = 0; i < 4; i++) {
list.add(scan.nextLine());
}
int count = 0;
for(int i = 0; i < list.size(); i++){
if(count+2 > list.size()) {
break;
}
if(list.get(i+1).length() <= list.get(i).length()){
System.out.println(list.indexOf(list.get(i+1)));
break;
}
count = count + 1;
}
}
}
答案 0 :(得分:5)
您应该更改
list.indexOf(list.get(i+1))
到
i+1
由于String
中多次出现同一List
,因此您想返回违反排序的第一个元素的索引,即i+1
(而不是第一个String
的索引,该索引等于该元素)。
顺便说一句,即使您的List
中没有重复的元素,使用list.indexOf(list.get(i+1))
而不是简单地使用i+1
也没有意义。
答案 1 :(得分:3)
您不需要使用lastIndexOf
-您已经有了索引:
// Stsrt at index 1, as index 0 can never violate the rule:
for (int i = 1; i < list.size(); i++) {
if (list.get(i).length() < list.get(i - 1).length() {
System.out.println("Rule violated at index " + i + " (" + list.get(i) + ")");
break;
}
}
答案 2 :(得分:2)
您还可以使用PriorityQueue
并在提供的比较器中进行检查
PriorityQueue<String> p = new PriorityQueue<>((a, b) -> {
if (a.length() > b.length()) {
throw new RuntimeException(a);
}
return 0;
});
p.add("foo");
try {
p.add("bar2");
} catch (RuntimeException e) {
System.out.println(p.size());
}
}