我被问到考试问题:
编写程序以读取两个字符串值,并找到输入的字符串字符集的交集和并集。 E.g。
- str1:
"Hi hello"
- str2:
"How are you"
- 联盟:
"hielowaryu"
- 交集:
"hoe"
(不区分大小写)
这是一门Java 101课程,所以我们不应该使用除了绝对基础知识之外的任何东西(没有高级数据结构)。我无法在规定的时间内完成,但我想知道如何解决这个问题。
答案 0 :(得分:4)
绝对最基本的方法:遍历第一个字符串,在第二个字符串中检查其包含。看起来你的联合和交叉不应该有重复(如果这可能是一个更难的问题)。
/** Returns the union of the two strings, case insensitive.
Takes O( (|S1| + |S2|) ^2 ) time. */
public static String union(String s1, String s2){
String s = (s1 + s2).toLowerCase(); //start with entire contents of both strings
int i = 0;
while(i < s.length()){
char c = s.charAt(i);
if(i != s.lastIndexOf(c)) //If c occurs multiple times in s, remove first one
s = s.substring(0, i) + s.substring(i+1, s.length());
else i++; //otherwise move pointer forward
}
}
/** Returns the intersection of the two strings, case insensitive.
Takes O( |S1| * |S2| ) time. */
public static String intersect(String s1, String s2){
String s = "";
s2 = s2.toLowerCase();
for(char c : s1.toLowerCase().toCharArray()){
if(s2.indexOf(c) != -1 && s.indexOf(c) == -1)
s += c;
}
return s;
}