以下java问题来自http://codingbat.com/prob/p132118:
给定两个字符串,将它们附加在一起(称为“连接”)并返回结果。但是,如果连接创建了一个双字符,则省略其中一个字符,因此“abc”和“cat”会产生“abcat”。即:
conCat("abc", "cat") → "abcat"
conCat("dog", "cat") → "dogcat"
conCat("abc", "") → "abc"
这是我制定的解决方案:
public String conCat(String a, String b) {
String result = a + b;
String r = "";
String f = "";
for(int i= 0; i < result.length(); i++)
{
f = Character.toString(result.charAt(i));
if(!( f.equals(result.charAt(i))) )
r += f;
}
return r;
}
我的问题是 - 导致我的代码将“ab”+“bc”连接到“abbc”而不是“abc”的逻辑缺陷在哪里?
答案 0 :(得分:3)
您得到a + b
的结果,因为您要将字符串f
与字符result.charAt(i)
进行比较。它们永远不相同,因为它们的类型不同,所以r += f;
无条件执行。
即使您已经纠正了这个问题,由于您已经连接了字符串,因此您的方法无效:您无法区分连接字符串,例如: conCat("ab", "bc")
vs conCat("abbc", "")
。在实际连接字符串之前,你需要在之前做一些事情。
如果满足以下所有条件,您需要删除一个字符:
a
非空b
非空a
的最后一个字符等于b
的第一个字符。在这种情况下,只需在连接之前切掉b
的第一个字符。否则,只需按字母顺序连接字符串。
public String conCat(String a, String b) {
if (!a.isEmpty() && !b.isEmpty() && a.charAt(a.length() - 1) == b.charAt(0)) {
return a + b.substring(1);
} else {
return a + b;
}
}