首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用Java从两个字符串打印出唯一的字母表?

如何使用Java从两个字符串打印出唯一的字母表?
EN

Stack Overflow用户
提问于 2015-04-22 18:08:13
回答 9查看 10.9K关注 0票数 7

最近,我参加了一个面试。他们让我写一个程序来打印两个字符串中的独特字母和常用字符。我写了下面的代码来打印常用字符:

代码语言:javascript
运行
复制
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的情况下打印两个字符串中的唯一字符和常见字符呢

任何代码都将不胜感激。

EN

Stack Overflow用户

发布于 2017-01-17 01:31:39

当你去面试时,如果他们像你说的那样问一些愚蠢的问题,那么他们就不会去寻找复杂的集合框架。他们正在寻找你是否可以用你的编码能力在草根级别做同样的事情,记住你如何编写能够处理情况的代码,即使所提供的数据高达数百万。

这个问题可以通过byte[]很容易地解决。我们知道char在内部是用数字表示的。

因此,在第一次迭代中,只需迭代第一个字符串(Str1)的字符,并将字节位置设置为某个常量,例如1。

代码语言:javascript
运行
复制
for (int i=0; i<str1.length; i++) {
     byteArr[(int)str.charAt(i)] = 1; // O(1)
}

因此,在第二次迭代中,只需迭代第二个字符串的字符,并将字节位置设置为某个常量,例如,如果字节位置设置为1,则字节位置为2,如果字节位置设置为3,则表示字节位置对于str2是唯一的。

在第三次迭代中,只需迭代字节arr并打印字符(将索引转换为char),其中2表示通用,1/3表示唯一。

最终解决方案为O(n)且可伸缩。

票数 3
EN
查看全部 9 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29794233

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档