我用Java编写了一个小程序来查找句子中的重复单词。没有语法错误,没有复杂性错误,但是一旦运行它我就会收到一个奇怪的长错误。
class Find {
public static void main(String args[]) {
String M = "Hello World Hello Hello";
String[] words = M.split(" ");
for (int i = 0; i < M.length(); i++) {
for (int j = 0; j < M.length(); j++) {
if (words[i].equalsIgnoreCase(words[j])) {
System.out.printf("Duplicate Words :" + words[i], words[j]);
}
}
}
}
}
运行时:
Duplicate Words :HelloDuplicate Words :HelloDuplicate Words :HelloException in thread "main" java.lang.ArrayIndexOutOfBoundsException: 4
at Find.main(Find.java:9)
我做错了什么?请帮忙。
答案 0 :(得分:5)
您希望迭代受
限制words.length
不是M.length()
最好分割,然后使用HashSet<String>
add(String)
方法
将是O(n)
,您现有的解决方案是O(n^2)
答案 1 :(得分:1)
你正在使用的技术非常糟糕。
考虑这样的事情:
答案 2 :(得分:1)
我知道你已经找到了你想要的东西,但我用更少的头痛更好地解决了这个问题
代码:
String M = "Hello World Hello Hello helLo hEllo worLD";
String[] words = M.split(" ");
List<String> wordsList = Arrays.asList(M.split(" "));
wordsList.stream().map(s -> s.toUpperCase())
.distinct()
.forEach( s -> System.out.print(s + " "));
输出:
HELLO WORLD
注意:我在Java中使用了lambda
导入
import java.util.*;
import java.util.stream.Collectors;