最近,我参加了一次面试。 面试官要求我编写一个程序来打印两个字符串中独特字符和相同字符。 我编写了以下代码以打印相同字符:
String s1 = "I am living in India";
String s2 = "India is a beautiful country";
char[] s1Array = s1.toCharArray();
char[] s2Array = s2.toCharArray();
LinkedHashSet<Character> s1CharSet = new LinkedHashSet<Character>();
LinkedHashSet<Character> s2CharSet = new LinkedHashSet<Character>();
for(char kc : s1Array){
s1CharSet.add(kc);
}
for(char c: s2Array){
s2CharSet.add(c);
}
s1CharSet.retainAll(s2CharSet);
if(s1CharSet.size()==0){
System.out.println("There are no common characters between the two strings");
}
else{
System.out.println(s1CharSet);
}
}
但是他们说他们对我的回答不满意。我猜这是因为他们没有想到使用retainAll
。所以,请告诉我未来编程的正确方法,以满足他们的要求。
我甚至在谷歌上搜索了,但没有找到任何好的、易懂的链接。
那么,如何打印两个字符串中唯一和共同的字符,而不使用retainAll
呢?
任何代码都将不胜感激。
ArrayList
中使用contains()
是对集合进行线性搜索,因此它是O(n)
操作。如果对n
个元素执行此操作,则得到O(n^2)
。另一方面,retainAll()
可以在HashSet
上实现(我假设它确实这样做了-没有验证),并且可以在线性时间内简单地完成,因此OP代码的复杂度为O(n)。 - amit