做这个题目一定要思路清晰,各种情况都要考虑完善。
分为两种情况
1.其中有一个到结尾了
2.两个都没结尾,这里以它的下一位是否为*作为判断条件。
1 class Solution { 2 public: 3 bool match(char* str, char* pattern) 4 { 5 if (str == NULL || pattern == NULL) 6 return false; 7 return matchcore(str, pattern); 8 } 9 bool matchcore(char* str, char* pattern) 10 { 11 //第一种情况 12 if (*str == ‘\0‘&&*pattern == ‘\0‘) 13 return true; 14 if (*str != ‘\0‘&&*pattern == ‘\0‘) 15 return false; 16 17 //第二种情况 18 if (*(pattern + 1) == ‘*‘) 19 { 20 if (*str == *pattern || (*str != ‘\0‘&&*pattern == ‘.‘)) 21 return matchcore(str + 1, pattern) ||//有n个不需要的数字需要用*消除 22 matchcore(str, pattern + 2);//跳过这个数字和后面的星星,即出现0次 23 else 24 return match(str, pattern + 2);//跳过这个数字和后面的星星,即出现0次 25 26 } 27 if (*str == *pattern|| (*str != ‘\0‘&&*pattern == ‘.‘))//注意这里的条件语句 28 //两个数相同和没有结尾的情况下模式出现‘.‘是一样的 29 return matchcore(str + 1, pattern + 1); 30 return false; 31 } 32 };
原文地址:https://www.cnblogs.com/neverland0718/p/11239651.html
时间: 2024-11-02 13:36:43