http://www.lintcode.com/zh-cn/problem/regular-expression-matching/
class Solution {
public:
/**
* @param s: A string
* @param p: A string includes "." and "*"
* @return: A boolean
*/
bool isMatch(const char *s, const char *p) {
// write your code here
const char*str, *ptr;
bool start = false;
int flag;
int n=0, m =0 ;
for (str = s; *str != '\0'; str++)n++;
for (ptr = p; *ptr != '\0'; ptr++)m++;
n--, m--;
while (n>=0)
{
if (p[m] == s[n] || p[m] == '.')m--, n--;
else if(p[m] == '*'){
if (p[m - 1] != s[n]){//s和*前面的不一样
if ( p[m - 1] == '.'){//如果前面是.
if (m - 2 >= 0){//如果*前面至少还有2个字符
start = true;
flag = m;
while (s[n] != p[m - 2]){//如果s有存在.*前面的字符
n--;
}
}
if (m == 1) return true;//如果最后剩下.*就return true;
}
}
else{
while (p[m - 1] == s[n]){
n--;
}
}
m -= 2;
}
else
if (start){
m = flag;
}
else return false;
}
while (m>0&& p[m] == '*')
m -= 2;
return n==-1&&m==-1;
}
};