https://oj.leetcode.com/problems/wildcard-matching/
模拟通配符的匹配
做法非常好
class Solution { public: bool isMatch(const char *s, const char *p) { bool hasStar = false; const char *str,*ptr; for(str = s,ptr = p; *str != '\0'; str++,ptr++) { switch(*ptr) { // 相当于做了一次匹配,都往前走1 case '?': break; case '*': hasStar = true; s = str; // 记录,前面的已经处理好了 p = ptr; while(*p == '*') p++; // 相当于把*先映射成空 if(*p == '\0') return true; str = s - 1; ptr = p - 1; break; default: if(*str != *ptr) { if(!hasStar) return false; s++; // s往前挪一个,相当于 * 多映射一个 回到出现*的位置开始 再往前加一个 再进行下面的匹配 str = s -1; ptr = p -1; } } } while(*ptr == '*') ptr++; return (*ptr == '\0'); } };