题目大意:
有一个字符串它的构成是词 + 空格的组合,如“北京 杭州 杭州 北京”,
要求输入一个匹配模式(简单的以字符来写), 比如 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。
那么,又延伸出两个问题:
如果知道字符是不是第一次出现呢