leetcode Regular Expression Matching

来源:互联网 发布:搜狗五笔输入法mac版 编辑:程序博客网 时间:2024/04/29 01:11

题目链接

public class Solution {    public boolean isMatch(String s, String p) {        return help(s,0,p,0);    }    public boolean help(String s,int startS,String p,int startP)       {        if(startP>=p.length())        {            return startS>=s.length();        }        char pchar=p.charAt(startP);        if(startP!=p.length()-1)        {            char pNextChar=p.charAt(startP+1);            if(pNextChar=='*')            {                while(startS<s.length()&&(s.charAt(startS)==pchar||pchar=='.'))                {                    if(help(s, startS, p, startP+2))                    {                        return true;                    }                    startS++;                }                return help(s, startS, p, startP+2);            }            else            {                if(startS<s.length()&&(s.charAt(startS)==pchar||pchar=='.'))                {                    return help(s, startS+1, p, startP+1);                }                return false;            }        }        else        {            if(startS<s.length()&&(s.charAt(startS)==pchar||pchar=='.'))            {                return help(s, startS+1, p, startP+1);            }            return false;        }    }}

如果看不懂我的代码。下面我贴上一个牛人的代码

#include<iostream>using namespace std;bool isMatch(const char *s, const char *p) {        // Start typing your C/C++ solution below        // DO NOT write int main() function        if (*p == 0) return *s == 0;        if (*(p+1) != '*')        {            if (*s != 0 && (*p == *s || *p == '.')) return isMatch(s+1, p+1);            return false;        }        else        {            // *s == *p            while (*s != 0 && (*s == *p || *p == '.'))            {                if (isMatch(s, p+2)) return true;                s++;            }            return (isMatch(s, p+2));        }    }int main(){        if(isMatch("ab",".*c"))        {            cout<<"yes"<<endl;        }        else        {            cout<<"no"<<endl;        }}
0 0