java 字符串匹配abba_字符串匹配模式问题

本文介绍了一个Java编程挑战,要求判断一个字符串是否符合特定的abba模式。例如,模式'abba'匹配'北京 杭州 杭州 北京',但不匹配'aabb'。解决方案包括两种方法:一是使用HashMap记录字符及其对应的单词;二是构建正则表达式进行匹配。文章提供了详细的解题思路和核心代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目大意:

有一个字符串它的构成是词 + 空格的组合,如“北京 杭州 杭州 北京”,

要求输入一个匹配模式(简单的以字符来写), 比如 aabb, 来判断该字符串是否符合该模式。

例子:

pattern = "abba", str="北京 杭州 杭州 北京" 返回 ture

pattern = "aabb", str="北京 杭州 杭州 北京" 返回 false

pattern = "abc", str="北京 杭州 杭州 南京" 返回 false

pattern = "acac", str="北京 杭州 北京 广州" 返回 false

编程语言:Java

1. 参考思路

对于 pattern,我们需要将其由字符串拆分成字符数组,该数组中的每一个字符都需要对应 str 中的一个词。

也就是说,pattern.length 和 str.split(" ").length 是务必要相等的。我们可以把这一前提当做算法最开始的校验条件,以下不再赘述。

1.1 解法一

对于 pattern 拆分而来的字符数组,如:[a, b, b, a],和目标字符串 str 按空格拆分出的单词数组,如:[北京, 杭州, 杭州, 北京],不难推理出,a、b 实际需要对应的单词,是根据第一次出现 a、b 时,其所对应的单词而定的。

那么,我们就可以将这个问题的解法转换为:

从左到右同时遍历字符数组和单词数组,并在该过程中:

当 pattern 字符数组第一次出现某一字符时,根据其在单词数组中的位置,记录该字符对应的单词;

当 pattern 字符数组第 N 次( N > 1 )出现某一字符时,取出该字符应该对应的单词,并与当前字符对应在单词数组中的单词对比,如果相同则继续校验,否则返回 false;

如果校验至最后一个单次仍然成立,则返回 true。

那么,又延伸出两个问题:

如果知道字符是不是第一次出现呢

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值