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)
设置为该索引加1,并将si
向前推进1pi
- 如果到达
的末尾,则完成操作P
- 否则,返回到搜索步骤,继续处理,直到找到模式或耗尽字符串
- 如果需要打印序列的索引,请添加一个索引数组,并在执行时填写。数组的长度应等于
的长度P
请注意,此问题可能有多种解决方案。当解决方案存在时,此算法会找到解决问题的第一组“词典”索引。您的示例不清楚。根据你的输入,3,6是一个有效的答案吗?这里有一个陷阱。这种模式可能会出现间隙。不一定是连续的。那么您可以在字符串上使用正则表达式。如果有多个出现呢?如果出现-
ADDCXABA
,您希望返回什么?我正在为此使用嵌套For循环。还有其他更好的方法吗?@R11G您只需要一个显式循环即可完成此操作—一个通过P
元素的循环。查找下一个匹配可以通过调用S.indexOf(si,P.charAt(pi))
而不是显式嵌套循环来完成。使用正则表达式解决了它,但我无法使用您建议的算法来解决。为什么这是一个“贪婪”的策略?有什么特点吗?