如何在String / Char数组中搜索模式?

时间:2013-10-06 15:21:16

标签: java arrays

我需要在用户给出的输入中查找模式。如果找到,则返回(开始,结束)位置。

例如: -

输入= A B C D B C A D

要查找的模式= D C A

输出= 3,6

模式不一定必须连续发生。

可以是D在输入的开头,C在中间,A在结尾。 - 一个有效的场景。

我很困惑的两件事。

  • 如何接受输入?作为阵列?如果是,那么作为String或Char数组?

  • 如何查找模式?

1 个答案:

答案 0 :(得分:1)

输入的格式在这里无关紧要:您可以将字符串和序列作为字符串。诀窍在于决定用于解决问题的算法。

在这种情况下,贪婪的策略将起作用:

  • 读取两个字符串,S(字符串)和P(模式)。
  • 为字符串创建两个索引 - si,为模式创建pi,并将它们设置为零。
  • P.charAt(pi)开始,在S中搜索字母si。如果在si到最后的子字符串中找不到该字母,则该模式不存在
  • 否则,在P.charAt(pi)中首次出现S,将si设置为该索引加1,然后将pi提前一个。
  • 如果到达P的末尾,则表示您已完成
  • 否则,请返回搜索步骤,继续处理,直到找到模式或耗尽字符串。
  • 如果需要打印序列的索引,请添加索引数组,并随时填写。数组的长度应等于P的长度。

请注意,此问题可能有多种解决方案。当存在解决方案时,该算法找到第一个" lexicographic"解决问题的索引集。