LeetCode之Wildcard Matching
/*这里的难度主要是理解题意,题中要点如下:
1.字符‘?’能匹配任何单个字符;
2.字符‘*’能匹配任意长度的任意字符串。(这说明p中‘*’可以用来匹配s中0个、1个、2个...n个字符)
根据以上题意,遍历p中*所有的匹配情况,即可获得解答方法。*/
class Solution {
public:
    bool isMatch(string s, string p) {
        int i(0), j(0);
        int s_match_star(-1), p_star(-1);
        while(i < s.size()){
            if(p[j] == '*'){
                while(p[j] == '*') ++j;
                p_star = j - 1;//记录‘*’号所在位置
                s_match_star = i;//s中,对应于p中‘*’所出现的值
            }
            else if(p[j] == '?' || s[i] == p[j]){
                ++i;
                ++j;
            }
            else{
                if(p_star == -1) return false;//不存在‘*’号,则不匹配
                j = p_star + 1;
                i = s_match_star + 1;
                s_match_star = i;
            }
        }
        while(j < p.size() && p[j] == '*') ++j;
        if(j < p.size()) return false;
        return true;
    }
};

阅读更多
文章标签: Leetcode
个人分类: Leetcode
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

LeetCode之Wildcard Matching

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭