Java中的字符串联盟

时间:2014-12-29 05:32:25

标签: java string union intersection

我被问到考试问题:

  

编写程序以读取两个字符串值,并找到输入的字符串字符集的交集和并集。 E.g。

     
      
  • str1:"Hi hello"
  •   
  • str2:"How are you"
  •   
  • 联盟:"hielowaryu"
  •   
  • 交集:"hoe"(不区分大小写)
  •   

这是一门Java 101课程,所以我们不应该使用除了绝对基础知识之外的任何东西(没有高级数据结构)。我无法在规定的时间内完成,但我想知道如何解决这个问题。

1 个答案:

答案 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;
}