正则表达式匹配

来源:互联网 发布:开贝抠图软件破解版 编辑:程序博客网 时间:2024/06/06 12:21

 本题源自leetcode

-----------------------------------------------------------

https://leetcode.com/problems/wildcard-matching/description/

思路:

 1 用两个变量循环遍历字符串。两个变量标识 匹配到特殊字符* 的时候子串和母串的下标变量变化。

 2 最后判断是否匹配。

代码:

 bool isMatch(string s, string p) {        int m=s.length();        int n=p.length();                int i=0;        int j=0;        int sp=-1;        int pp=-1;        while(i<m){            if(s[i]==p[j]||p[j]=='?'){                i++;                j++;            }else if(p[j]=='*'){                pp=++j;                sp=i;            }else{                if(pp>-1){                    j=pp;                    i=++sp;                }else{                    return false;                }            }        }        while(p[j]=='*')            j++;        return j==n;    }

代码2:

 bool isMatch(string s, string p) {        if(s.length()==0&&p.length()==0)            return true;        int m=s.length();        int n=p.length();        vector<vector<bool>> dp(m+1,vector<bool>(n+1,false));        dp[0][0]=true;        for(int i=1;i<=n;i++){            // 第一行,匹配字符为空,所以考虑待匹配字符为*的情况            if(p[i-1]=='*'){                dp[0][i]=dp[0][i-1];            }        }        for(int i=1;i<=m;i++){            for(int j=1;j<=n;j++){                if(s[i-1]==p[j-1]||p[j-1]=='?'){                    dp[i][j]=dp[i-1][j-1];                }                if(p[j-1]=='*'){                    dp[i][j]=dp[i][j-1]||dp[i-1][j];                }            }        }        return dp[m][n];    }



原创粉丝点击