C++ | Leetcode C++题解之第44题通配符匹配

题目:

题解:

cpp 复制代码
class Solution {
public:
    bool isMatch(string s, string p) {
        auto allStars = [](const string& str, int left, int right) {
            for (int i = left; i < right; ++i) {
                if (str[i] != '*') {
                    return false;
                }
            }
            return true;
        };
        auto charMatch = [](char u, char v) {
            return u == v || v == '?';
        };

        while (s.size() && p.size() && p.back() != '*') {
            if (charMatch(s.back(), p.back())) {
                s.pop_back();
                p.pop_back();
            }
            else {
                return false;
            }
        }
        if (p.empty()) {
            return s.empty();
        }

        int sIndex = 0, pIndex = 0;
        int sRecord = -1, pRecord = -1;
        while (sIndex < s.size() && pIndex < p.size()) {
            if (p[pIndex] == '*') {
                ++pIndex;
                sRecord = sIndex;
                pRecord = pIndex;
            }
            else if (charMatch(s[sIndex], p[pIndex])) {
                ++sIndex;
                ++pIndex;
            }
            else if (sRecord != -1 && sRecord + 1 < s.size()) {
                ++sRecord;
                sIndex = sRecord;
                pIndex = pRecord;
            }
            else {
                return false;
            }
        }
        return allStars(p, pIndex, p.size());
    }
};
相关推荐
努力学算法的蒟蒻4 小时前
day48(12.29)——leetcode面试经典150
算法·leetcode·面试
java修仙传4 小时前
力扣hot100:有效的括号
算法·leetcode·职场和发展
Tipriest_4 小时前
C++ 中 std::move 的使用方法与注意事项
c++·move
yuuki2332334 小时前
【C++】vector底层实现全解析
c++·后端·算法
圣保罗的大教堂4 小时前
leetcode 756. 金字塔转换矩阵 中等
leetcode
小尧嵌入式4 小时前
C++选择排序插入排序希尔排序快排归并排及大小根堆实现优先级队列
数据结构·c++·windows·算法·排序算法
Dream it possible!5 小时前
LeetCode 面试经典 150_分治_合并 K 个升序链表(108_23_C++_困难)
c++·leetcode·链表·面试·分治
天赐学c语言5 小时前
12.29 - 字符串相加 && vector和map的区别
数据结构·c++·算法·leecode
yuuki2332335 小时前
【C++】 list 实现:双向循环链表解析
c++·链表·list
随意起个昵称5 小时前
【做题总结】顺子(双指针)
c++·算法