标签:
1. recursion
1 class Solution { 2 public: 3 bool isMatch(const char *s, const char *p) { 4 if(s == NULL || p == NULL) return false; 5 if(*p == ‘\0‘) return *s == ‘\0‘; 6 7 if((*p == *s) || (*p == ‘?‘ && *s != ‘\0‘)){ 8 return isMatch(s + 1, p + 1); 9 } 10 else if(*p == ‘*‘){ 11 while(*p == ‘*‘) p++; 12 if(*p == ‘\0‘) return true; 13 else{ 14 while(*s != ‘\0‘){ 15 if(isMatch(s,p)) return true; 16 s++; 17 } 18 } 19 } 20 return false; 21 } 22 };
status: Time Limit Exceeded
2. dynamic programming
1 class Solution { 2 public: 3 bool isMatch(const char *s, const char *p) { 4 if(s == NULL || p == NULL) return false; 5 int ls, lp; 6 for (ls = 0; *(s + ls) != ‘\0‘; ls++); 7 for (lp = 0; *(p + lp) != ‘\0‘; lp++); 8 if(ls == 0){ 9 const char *tmp = p; 10 while(*tmp == ‘*‘) tmp++; 11 return *tmp == ‘\0‘; 12 } 13 if(lp == 0) return *s == ‘\0‘; 14 15 bool *a = new bool[lp](); 16 for (int i = 0; i < lp; i++) a[i] = true; 17 18 bool *b = new bool[lp](); 19 for (int t = 0; t < ls; t++){ 20 if(a[0] == true && *p == ‘*‘) b[0] = true; 21 else b[0] = false; 22 for (int j = 1; j < lp; j++){ 23 if((a[j] == true && *(p + j) == ‘*‘) || (a[j - 1] == true && (*(s + t) == *(p + j) || *(p + j) == ‘?‘))) b[j] = true; 24 else b[j] = false; 25 } 26 copy(a,b,lp); 27 } 28 return a[lp]; 29 } 30 void copy(bool *a, bool *b, const int n){ 31 for(int i = 0; i < n; i++){ 32 a[i] = b[i]; 33 } 34 } 35 };
status: Time Limit Exceeded
3. greedy
1 class Solution { 2 public: 3 bool isMatch(const char *s, const char *p) { 4 const char *pp = NULL; 5 const char *ss = NULL; 6 while(*s){ 7 if(*s == *p || *p == ‘?‘){ 8 s++; 9 p++; 10 continue; 11 } 12 else if(*p == ‘*‘){ 13 pp = p; 14 p++; 15 ss = s; 16 continue; 17 } 18 else if(pp != NULL){ 19 p = pp + 1; 20 ss++; 21 s = ss; 22 continue; 23 } 24 return false; 25 } 26 while(*p == ‘*‘) p++; 27 return *p == ‘\0‘; 28 } 29 };
标签:
原文地址:http://www.cnblogs.com/chenc11/p/4190928.html