最近,我参加了一次采访.他们让我写一个程序来打印两个字符串中的唯一字母和常用字符.我编写了下面的代码来打印常见字符:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
但他们说他们对我的回答并不满意.我想这是因为他们没有料到retainAll.所以,请告诉我正确的编程方式,以便将来满足它们.
我甚至谷歌搜索,但我没有找到任何好的,可理解的链接.
那么,如何从两个字符串中打印出唯一且常用的字符而不使用retainAll?
任何代码将不胜感激.
面试官可能想检查你对如何有效解决这个问题的内部原理的理解,而使用“retainAll()有点”错过了这个任务的目的。
要“从头开始”实现它,可以使用多种方法:
与您的解决方案类似 - 填充两个Set对象 - 每个字符串一个对象,然后通过以下方式检查它们之间的差异/共同元素:
for (Character c : set1) {
if (set2.contains(c)) {
System.out.println(c);
}
}
Run Code Online (Sandbox Code Playgroud)
如果已知字母表是恒定的(并且足够小),您甚至可以使用位集,否则 aHashSet就可以并且将实现O(n)平均情况性能。
排序和迭代:对两个 char 数组进行排序并一起迭代以查找公共(和唯一)字符。虽然在java中它没有真正的好处(因为它String是不可变的,所以你无论如何都需要创建一个新的char[]) - 在其他语言中,它节省了空间并且可以在很少的额外空间的情况下就地完成。
| 归档时间: |
|
| 查看次数: |
7541 次 |
| 最近记录: |