给出2个带有1个或更多共同字母的字符串,将它们放在一起,例如“ab”+“bc”=“abc”

时间:2014-02-21 01:04:30

标签: java substring string-concatenation

当字符串超过2个常用字母时,我很困惑: “abc”+“bcd”=“abcd”,没有重复,如“abccd”或“abbccd”

public static String make_new_name(String name1, String name2) {
    String result = "";
    for (int i = 0 ; i < name1.length() ; i++) {
        System.out.println("=========== i " + name1.charAt(i) + " =================");
        for (int j = 0 ; j < name2.length() ; j++) {
            System.out.println(" j : " + name2.charAt(j)); 
            if (name1.charAt(i) != name2.charAt(j)) {
                result += name1.charAt(i);
            } else {
                result += name1.charAt(j);
            }
        }
    }
    System.out.println(result) ;
    return result ;
}   

但是这段代码不起作用!请帮忙。

2 个答案:

答案 0 :(得分:3)

假设这是一次学习练习,我不会通过编写代码来破坏你的乐趣。

这是一个只需要一个显式循环的简单算法:遍历第一个字符串的所有后缀,并检查它们是否代表第二个字符串的前缀。从最长的后缀(这是整个第一次恶化)开始,并继续使用更短和更短的后缀。找到与第二个单词的前缀匹配的后缀后,删除该后缀,并将第二个字符串附加到结果中。

在Java中,通过使用一个参数调用substring来获得单词的后缀。要检查字符串是否是另一个字符串的前缀,请使用startsWith方法。

答案 1 :(得分:0)

您可以设置两个字符串的差异,然后将它们连接起来以获得结果。

 public static String make_new_name(String name1, String name2) {
     Set<Character> nameSet1 = new HashSet<Character>();
     for(char c : name1.toCharArray())
     {
         nameSet1.add(c);
     }

     Set<Character> nameSet2 = new HashSet<Character>();
     for(char c : name2.toCharArray())
     {
         nameSet2.add(c);
     }

     nameSet1.removeAll(nameSet2); // Set Difference

     StringBuilder sb = new StringBuilder(nameSet1.size() + nameSet2.size());

     for(Character c : nameSet1)
     {
         sb.append(c);
     }
     for(Character c : nameSet2)
     {
         sb.append(c);
     }

     return sb.toString();

 }