关于在2个字符串之间查找公共字符的问题,起初我使用了直接的String.contains()方法:
static String twoStrings(String s1, String s2) {
boolean subStringFound = false;
for(int i = 0; i < s2.length(); i++){
if(s1.contains(Character.toString(s2.charAt(i)))) {
subStringFound = true;
break;
}
}
return subStringFound?"YES":"NO";
}
但是,它通过了大多数测试用例的5/7测试用例,但是面临2个真正长字符串的用例的超时。
然后我尝试使用Set.contains():
static String twoStrings(String s1, String s2) { boolean subStringFound = false; HashSet<Character> set = new HashSet<>(); for(int i = 0; i < s1.length(); i++){ set.add(s1.charAt(i)); } for(int i = 0; i < s2.length(); i++){ if(set.contains(s2.charAt(i))) { subStringFound = true; break; } } return subStringFound?"YES":"NO"; }
尽管我正在运行附加循环来创建Set,但它通过了所有测试。造成运行时显着差异的主要原因是什么?
[为了在2个字符串之间查找公共字符的问题,首先我使用了直接的String.contains()方法:静态字符串twoStrings(String s1,String s2){boolean subStringFound = ...
您必须查看所使用的JDK中的实现,但最有可能String.contains
是linear search
因为它们是不同的数据结构,并且在它们上实现的size
方法也不同。