正则表达式匹配的判定函数。
Some examples:
isMatch(“aa”,”a”) → false
isMatch(“aa”,”aa”) → true
isMatch(“aaa”,”aa”) → false
isMatch(“aa”, “a*”) → true
isMatch(“aa”, “.*”) → true
isMatch(“ab”, “.*”) → true
isMatch(“aab”, “c*a*b”) → true
【思路】
想着单纯地考虑所有情况,后来发现几乎不可能。写了一上午,终于写不下去(┙>∧<)┙へ┻┻
因为整体是否能返回true,需要确定除最后一个元素外的剩下元素是否匹配,即动态规划。用递归。
不做了。摔!
【my code】
bool isMatch(string s, string p) { int i=0,j=0; int m=s.size(); int n=p.size(); while(i<m&&j<n){ if(s[i]!=p[j]){ if(p[j]=='.'){ if(p[j+1]=='*'){ p+='*'; p[j+1]='.'; n++; } p[j]=s[i]; i++; j++; } else if(p[j]=='*'&&i>0&&j>0){ p[j]=p[j-1]; n++; p+='*'; if(p[j]!=s[i]) return false; } else if(p[j+1]=='*')//aab-c*a*b j+=2; else return false; } else{ i++; j++; } } if(j<n&&p[n-1]!='*'||i<m) return false; return true; }
通过300+个测试用例,不能AC。
【other code】
bool isMatch(const char *s, const char *p) { if ('