fork download
  1. #include <cassert>
  2. #include <cstdio>
  3. using namespace std;
  4.  
  5. int count = 0;
  6.  
  7. bool isMatch(const char *s, const char *p) {
  8.  
  9. printf("%5d %s %s\n", count++, s, p);
  10.  
  11. assert(s && p);
  12. if (*p == '\0') return *s == '\0';
  13.  
  14. // next char is not '*': must match current character
  15. if (*(p+1) != '*') {
  16. assert(*p != '*');
  17. return ((*p == *s) || (*p == '.' && *s != '\0')) && isMatch(s+1, p+1);
  18. }
  19. // next char is '*'
  20. while ((*p == *s) || (*p == '.' && *s != '\0')) {
  21. if (isMatch(s, p+2)) return true;
  22. s++;
  23. }
  24. return isMatch(s, p+2);
  25. }
  26.  
  27. int main() {
  28. isMatch("aaa", "a*a*a*b");
  29. return 0;
  30. }
  31.  
Success #stdin #stdout 0.02s 2680KB
stdin
Standard input is empty
stdout
    0   aaa   a*a*a*b
    1   aaa   a*a*b
    2   aaa   a*b
    3   aaa   b
    4   aa   b
    5   a   b
    6      b
    7   aa   a*b
    8   aa   b
    9   a   b
   10      b
   11   a   a*b
   12   a   b
   13      b
   14      a*b
   15      b
   16   aa   a*a*b
   17   aa   a*b
   18   aa   b
   19   a   b
   20      b
   21   a   a*b
   22   a   b
   23      b
   24      a*b
   25      b
   26   a   a*a*b
   27   a   a*b
   28   a   b
   29      b
   30      a*b
   31      b
   32      a*a*b
   33      a*b
   34      b