这道题在 Leetcode 中见过,大概思路是分两条线,一条是匹配 nowStr 和 nowPattern 的关系,一条是 nextPattern 是否是*。
- 如果 nowPattern 是 . 且 nowStr 没到结尾,或者 nowStr 和 nowPattern 相等,且 nextPattern 不是*,这是最简单的一个匹配,可以就直接匹配下一个(posStr+1,posPattern+1)。
- 如果 nowPattern 是 . 且 nowStr 没到结尾,或者 nowStr 和 nowPattern 相等,且 nextPattern 是*,那么就有两种考虑,要么跳过 nowStr,匹配 posStr+1(*匹配成功了一回),要么跳过 nowPattern,匹配 posPattern+2(*没有匹配成功)。
- 如果 nowPattern 不是. , nowStr 和 nowPattern 不等,且 nextPattern 不是*,那么就匹配失败,返回 false。
- 如果 nowPattern 不是. , nowStr 和 nowPattern 不等,且 nextPattern 是*,那还有救,可能是 nowPattern 被匹配了 0 次,可以直接跳过 nowPattern,匹配 posPattern+2。
做题的时候还需要注意:
- 不要把\0 写成了\n。
- 记得在测试 nowPattern 是 . 的时候还要测试 nowStr 没有到结尾。
1 | class Solution { |