关闭

LeetCode之Wildcard Matching

标签: Leetcode
253人阅读 评论(0) 收藏 举报
分类:
/*这里的难度主要是理解题意,题中要点如下:
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;
    }
};

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:45519次
    • 积分:1778
    • 等级:
    • 排名:千里之外
    • 原创:125篇
    • 转载:68篇
    • 译文:1篇
    • 评论:0条