给定子环列表和字符串,如果它是子字符串,则打印出列表中的项目。
在不使用任何子字符串方法的情况下,最有效的方法是什么?
示例:
输入:["cat", "dog", "foo", "foopoo", "foopo", "nope", "dogf"]
输出:"catdogfoopoo"
解释
“c”在索引0的地图中。
循环遍历“cat”的长度并比较它是否与从0到“cat”的长度相同
如果是,请打印。
我的想法:
所以到目前为止我的想法是你会遍历给定的字符串并将每个字符映射到索引的arraylist
<(c,[0]),(a,[1]),(r,[2]),(d,[3]),(o,[4,7,8,10,11 ]),(g,[5]),(f,[6]),(p,[4])>
然后循环遍历子字符串列表。
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循环)
我有点卡在那里因为我确信有更有效的方法来做到这一点。不使用“包含”或诸如此类的东西(效率不高)
答案 0 :(得分:0)
for(int i=0; i < array.length; i++){
if(input.contains(array[i])){
System.out.println(array[i]);
}
}
答案 1 :(得分:0)
这应该是解决此问题的解决方案。
String text = "cardogfoopoo";
for (int x = 0; x < list.length; x++) {
if(text.containts(list[x])
System.out.println(list[x] + " is a substring!");
}
答案 2 :(得分:0)
也许您应该对子字符串进行排序并生成与此类似的数据结构(它是一个链接列表数组):
[0] cat
[1] dog -> f
[2] foo -> po -> o
[3] nope
在这个结构中你可以找到子串“dog”和“dogf”,以及“foo”,“foopo”和“foopoo”。它类似于在字典中搜索。
从“catdogfoopoo”字符串的索引0开始,然后开始搜索字典,即查找以“c”开头的条目。您发现结构的索引0包含'c',因此您决定遍历其长度。所以你取入条目长度(3个字符),看看从索引0开始的三个字符是否等于它(这是一个字符串比较,它无法帮助)。它们是,所以你打印“cat”,因为你找到了一个包含在你的字符串中的整个条目。
下一个索引是3,即字符'd',你是字典位置[0]的第一个条目。此位置没有其他条目,因此您必须查找以“d”开头的不同条目,以便找到“dog”作为位置[1]的第一个条目。您将此条目(由三个字符组成)与从索引4开始的字符串中的字符进行比较,并且您发现它们相等,因此您打印“dog”。下一个索引是6,你将它与下一个条目“f”进行比较,你发现它们是相同的,所以你打印“dogf”。
依此类推,直到你打印“foo”,“foopo”和“foopoo”。
希望很清楚。如果您发现它很有用,我可以提供有关如何创建结构的详细信息。