又是一道字符串题,一下子难有思路,所以往动态规划方向思考。
找到动归思路不难,主要是要考虑各种情况。首先将pattern进行处理,记下不含"*"的字符串npattern,同时用一个vector记录新字符串里有哪几个字符是可以任意个数的(这里我本来以为像b*b*这样的要简化为b,后来发现简化为bb就可以,因为vector记下了这两个b都是可以任意个数的,因此在动归时无影响)。然后进行动归时需要注意初始化问题(prev[0]=1),同时需要注意如果开头有若干个字符可以有任意个数,但对它们进行动归后发现没有值得匹配的字符(数组rear中每个元素都是0),那么我们就不需要将prev和rear互换(因为可以将这些字符取0个),否则会出错。
1 class Solution { 2 public: 3 bool match(char* str, char* pattern) 4 { 5 vector record; 6 int col=strlen(str)+1; 7 int* prev=new int[col]; 8 int* rear=new int[col]; 9 int len=strlen(pattern);10 char* npattern=new char[len+1];11 int row=0;12 for(int i=0;i