【发布时间】:2015-06-19 05:22:35
【问题描述】:
假设我得到了一个字符串片段列表。两个片段可以在它们重叠的子串上连接。
例如
“悲伤”和“den”=“悲伤”
"fat" 和 "cat" = 不能组合。
示例输入:
aw 是 poq qo
样本输出:
原来是这样的
那么,编写一个方法来找到可以通过组合列表中的字符串得到的最长字符串的最佳方法是什么。如果字符串是无限的,则输出应该是“无限的”。
public class StringUtil {
public static String combine(List<String> fragments) {
StringBuilder combined = new StringBuilder();
for (int i = 0; i < fragments.size(); i++) {
char last = (char) (fragments.get(i).length() - 1);
if (Character.toString(last).equals(fragments.get(i).substring(0))) {
combined.append(fragments.get(i)).append(fragments.get(i+1));
}
}
return combined.toString();
}
}
这是我的 JUnit 测试:
public class StringUtilTest {
@Test
public void combine() {
List<String> fragments = new ArrayList<String>();
fragments.add("aw");
fragments.add("was");
fragments.add("poq");
fragments.add("qo");
String result = StringUtil.combine(fragments);
assertEquals("awas poqo", result);
}
}
这段代码似乎对我不起作用...它返回一个空字符串:
org.junit.ComparisonFailure: expected:<[awas poqo]> but was:<[]>
我怎样才能让它工作?还有如何让它检查无限字符串?
【问题讨论】:
-
您的要求不清楚,可能只是拼写错误,但
inquisit和tision是如何生成inquisition的?另外,如何在一个列表中组合任意数量的字符串会产生无限的结果? -
我想知道什么是“无限”字符串
-
@David Wallace,模式是如果一个项目的最后一个字母与后续项目的第一个字母匹配,而不是组合在一起。
-
根据该规则,
inquisit和tision将变为inquisitision。这就是你的本意吗?
标签: java