Lintcode192 Wildcard Matching solution 题解

【题目描述】

Implement wildcard pattern matching with support for'?'and'*'.

'?'Matches any single character.

'*'Matches any sequence of characters (including the empty sequence).

The matching should cover the entire input string (not partial).

判断两个可能包含通配符“?”和“*”的字符串是否匹配。匹配规则如下:

'?' 可以匹配任何单个字符。

'*' 可以匹配任意字符串(包括空字符串)。

两个串完全匹配才算匹配成功。

函数接口如下:

bool isMatch(const char *s, const char *p)

【题目链接】

www.lintcode.com/en/problem/wildcard-matching/

【题目解析】

这道题有点类似与简单的正则表达式引擎。

我们用两个指针分别标记s和p,若当前位置的元素匹配,则两个指针都向右移动一个数。如果遇到'*',则p的指针指向后面不为'*'的第一个字符,再对s和p当前的指针位置做一个标记,标记为preS,preP,我们可以认为在当前指针之前的s和p是匹配的(感觉像动态规划的思想)。

如果不匹配,则分两种情况进行讨论:1、前面有'*',则先将PreS++,再将两个指针分别移回preS和preP,其实就是匹配失败,移向下一位再比较一次 2、前面没有'*',则匹配失败,返回false。最后,当s的指针指向最末尾,则比较结束。如果p的指针之后还有非'*'的字符,则匹配失败,否则匹配成功。

【参考答案】

www.jiuzhang.com/solutions/wildcard-matching/

你可能感兴趣的:(Lintcode192 Wildcard Matching solution 题解)