LeetCode每日一题,面试题16.18.Pattern Matching LCCI
先看题目描述
这也是道和模式匹配相关的问题
算法和思路
这道题想出思路来不难,关键点就在于要想到这道题其实就在于给 a, b 分配合适的长度,将长度分配好以后代入待匹配的字符串中进行匹配,若可以匹配,就返回 true,若遍历了所有的长度可能,均无法匹配,就返回 false,在分配长度时要注意,a 的长度可以决定 b 的长度,故分配长度时遍历一次即可。以 例子 1 为例,pattern 中有 2 个 a,2 个 b,value 的长度为 12,故 a 的可选长度范围为 [0, 6],遍历[0, 6] 发现 对于每个值均有一个整数值 b 与之对应 ,故 a 长度的可选值列表为 [0, 1, 2, 3, 4, 5, 6],然后将相应的长度一个个代入看能否有满足题目要求的匹配,发现有就返回 true,没有就返回 false。想到这个思路不难,关键就是实现和一些细节方面的东西,例如边界, pattern 长度和 value 长度为 0 的情况等
算法源码
1 | import java.util.LinkedList; |
有一个要注意的点是,比较字符串的值要用 equals() 方法,不能用 ==,因为字符串是引用型数据,== 会比较字符串的地址,equals 才是只比较字符串的值,这个需要注意