【发布时间】:2013-11-04 12:54:24
【问题描述】:
给定一个子环列表和一个字符串,如果它是一个子字符串,则打印出列表中的项目。
不使用任何子字符串方法的最有效方法是什么?
示例:
输入:["cat", "dog", "foo", "foopoo", "foopo", "nope", "dogf"]
输出:"catdogfoopoo"
说明:
“c”在地图中的索引 0 处。
遍历“cat”的长度,比较从0到“cat”的长度是否相同
如果是,打印。
我的想法:
到目前为止,我的想法是循环遍历给定的字符串并将每个字符映射到索引数组列表
然后循环遍历子字符串列表。
for (int x = 0; x < list.length; x++) {
String s = list.get(x);
if (s.get(s.charAt(0)) != null)
//loop through, comparing from whether the word is in the string
但这并没有利用这样一个事实,即如果“foo”已经被发现是一个子字符串,那么应该很容易检查“foopoo”是否是一个子字符串(没有循环通过 foo)
我有点卡在那里,因为我确信有一种更有效的方法可以做到这一点。不使用“包含”或诸如此类的东西(这不是更有效)
【问题讨论】:
-
您能否更明确地说明您的示例实际上是如何获得输出的?
-
@Dukeling 见上文 :)
-
如果您不允许使用包含,请提及它。错误指定的问题,否决票。
-
我将
cardogfoopoo更改为catdogfoopoo,我认为r只是打字错误。 -
你问的问题不是微不足道的。当您将“最有效”的限制放在此处时,您会提出一大堆问题:最有效的时间或空间(内存)或代码行数?平均而言,最坏的情况,最好的情况?例如平均而言,排序可以为您提供更好的时间,但不会比不对所有实际输入进行排序更好,然后您可能已经创建了一个巨大的代码维护噩梦,它没有提供任何真正的好处。祝你好运。