当字符串超过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 ;
}
但是这段代码不起作用!请帮忙。
答案 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();
}