44. Wildcard Matching

来源:互联网 发布:python 爬虫 股票数据 编辑:程序博客网 时间:2024/06/06 00:12

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).

The function prototype should be:
bool isMatch(const char *s, const char *p)

Some examples:

isMatch("aa","a") → falseisMatch("aa","aa") → trueisMatch("aaa","aa") → falseisMatch("aa", "*") → trueisMatch("aa", "a*") → trueisMatch("ab", "?*") → trueisMatch("aab", "c*a*b") → false

思路:
p : abcd*def*ass*sss。这样的匹配实际上就是要查找字符串s中是否有如下按照一定顺序的序列:abcd、def、ass和sss。只有这四个字符串按照顺序出现,那么就匹配成功。这个很关键。
如果我们匹配到abcd*def*ass时,下一个字符是,然后把这个继续展开,那么前面的这几个还需要进一步展开吗?当然不需要了。因为他们的目的已经实现了,就是已经找到了前几个可以匹配的字符。现在需要的就是在sIndex之后的字符串s中,找到是否有sss这个字符串,而这个匹配的工作,由最后这个已经完全可以胜任了。那么有没有可能是后面的字符串中没有sss,而在前面出现呢?即使有可能也没用,因为还有一个重要的前提是,有序。
这样就可以使用迭代法。每次遇到不满足条件的时候就回溯,每次遇到*时就更新回溯点。

class Solution {    public boolean isMatch(String s, String p) {        char[] chars = s.toCharArray();        char[] charp = p.toCharArray();        int ss = -1, pp = -1;        int sIndex = 0, pIndex = 0;        while (sIndex < chars.length) {            if (pIndex == charp.length) {//false,回溯                if(pp == -1)                     return false;                pIndex = pp + 1;                 sIndex = ss++;            } else if (charp[pIndex] == '?' || chars[sIndex] == charp[pIndex]) {//相同                pIndex++;                sIndex++;            } else if (charp[pIndex] == '*') {                pp = pIndex;                ss = sIndex;                pIndex = pp+1;            } else {                if (pp == -1)                     return false;                pIndex = pp + 1;                sIndex = ss++;            }        }        while (pIndex < charp.length) {            if(charp[pIndex] != '*')                break;            pIndex++;        }        return pIndex == charp.length;     }}
阅读全文
'); })();
0 0
原创粉丝点击
热门IT博客
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 孕妇可以吃大闸蟹 孕妇可以吃大闸蟹吗 孕妇能吃大闸蟹 哺乳期吃大闸蟹 孕妇能吃大闸蟹吗 蟹怎么吃 ella吃蟹表情夸张 吃大闸蟹 死大闸蟹能吃吗 感冒吃大闸蟹 大闸蟹哪些部位不能吃 梭子蟹怎么吃 吃大闸蟹能喝酒吗 蟹和什么不能一起吃 大闸蟹哪里不能吃 面包蟹怎么吃 大闸蟹什么不能吃 吃蟹季节 大闸蟹死 帝王蟹怎么吃 哺乳期可以吃大闸蟹 梭子蟹4个部位千万别吃图解 寄居蟹能吃吗 哺乳期可以吃大闸蟹吗 怎么吃大闸蟹 大闸蟹季节 寄居蟹吃 大闸蟹和什么不能同吃 大闸蟹吃多会怎么样 吃蟹不能吃什么 大闸蟹和什么不能吃 吃蟹后不能吃什么 蟹总 菜蟹 羔蟹 大杂蟹 蟹的吃法 香辣蟹 鳕蟹 吃蟹 剥蟹