Java 如何在字符串/字符数组中搜索模式?

Java 如何在字符串/字符数组中搜索模式?,java,arrays,Java,Arrays,我需要在用户提供的输入中查找模式。如果找到,则返回(开始、结束)位置 例如:- 输入=A B C D B C A D 要查找的模式=D C A 输出=3,6 模式不必连续出现 它可以像D在输入的开头,C在中间,A在结尾一个有效的场景 有两件事我很困惑 如何接受输入?作为一个数组?如果是,则作为字符串或字符数组 我如何寻找模式 这里输入的格式无关紧要:您可以将字符串和序列都作为字符串。诀窍在于决定一个用来解决问题的算法 在这种情况下,贪婪策略将起作用: 读取两个字符串,S(字符串)和P(模式)

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

例如:-

输入=
A B C D B C A D

要查找的模式=
D C A

输出=
3,6

模式不必连续出现

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

有两件事我很困惑

  • 如何接受输入?作为一个数组?如果是,则作为字符串或字符数组

  • 我如何寻找模式


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

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

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

请注意,此问题可能有多种解决方案。当解决方案存在时,此算法会找到解决问题的第一组“词典”索引。

您的示例不清楚。根据你的输入,3,6是一个有效的答案吗?这里有一个陷阱。这种模式可能会出现间隙。不一定是连续的。那么您可以在字符串上使用正则表达式。如果有多个出现呢?如果出现-
ADDCXABA
,您希望返回什么?我正在为此使用嵌套For循环。还有其他更好的方法吗?@R11G您只需要一个显式循环即可完成此操作—一个通过
P
元素的循环。查找下一个匹配可以通过调用
S.indexOf(si,P.charAt(pi))
而不是显式嵌套循环来完成。使用正则表达式解决了它,但我无法使用您建议的算法来解决。为什么这是一个“贪婪”的策略?有什么特点吗?