zoukankan      html  css  js  c++  java
  • LeetCode 10 Regular Expression Matching

    题目

    大模拟

    c++

    class Solution {
    public:
        int dp[1005][1005];
        bool ans;
        bool isMatch(string s, string p) {
            
            return judge(s,p,0,0);
        
        }
        bool judge(string s,string p,int i,int j)
    {
        if(dp[i][j]==-1)
            return false;
        if(i>=s.length())
        {
            if(j>=p.length())
            {
                return true;
            }
            else{
                if(j==p.length()-1&&p[j]=='*')
                {
                    return judge(s,p,i,j+1);
                }
                if(j<=p.length()-2&&p[j+1]=='*')
                {
                    return judge(s,p,i,j+2);
                }
                return false;
            }
        }
        if(j>=p.length())
        {
            
            dp[i][j]=-1;
            return false;
            
        }
        if(p[j]=='.')
        {
            ans = judge(s,p,i+1,j+1);
            if(ans==true)
                return true;
            else
            {
                if(j<p.length()-1&&p[j+1]=='*')
                {
                     ans = judge(s,p,i,j+2);
                    if(ans==true)
                        return true;
                    for(int k=i+1;k<=s.length();k++)
                    {
                        ans = judge(s,p,k,j+2);
                        if(ans==true)
                            return true;
                    }
                }
                dp[i][j]=-1;
                return false;
            }
        }
        else if(p[j]=='*')
        {
            ans = judge(s,p,i,j+1);
            if(ans==true)
                return true;
            dp[i][j]=-1;
            return false;
        }
        else{
            if(j<p.length()-1&&p[j+1]=='*')
            {
                if(p[j]==s[i])
                {
                    ans = judge(s,p,i,j+2);
                    if(ans==true)
                        return true;
                    for(int k=i+1;k<=s.length();k++)
                    {
                        if(p[j]==s[k-1])
                        {
                            ans = judge(s,p,k,j+2);
                            if(ans==true)
                                return true;
                        }
                        else
                            break;
                    }
                    dp[i][j]=-1;
                    return false;
                }
                else
                {
                    ans = judge(s,p,i,j+2);
                    if(ans==true)
                        return true;
                    dp[i][j]=-1;
                    return false;
                }
            }
            else
            {
                if(p[j]==s[i])
                {
                    ans=judge(s,p,i+1,j+1);
                    if(ans==true)
                        return true;
                    dp[i][j]=-1;
                    return false;
                }
                else
                {
                    dp[i][j]=-1;
                    return false;
                }
            }
        }
    }
        
       
             
    };
    
  • 相关阅读:
    OC-KVO简介
    注册审核
    应用权限
    关于函数执行的一点知识
    设置权限
    文件操作实例:文件管理器(网页版)
    文件操作
    正则表达式
    全局变量和递归
    案例:简单留言板
  • 原文地址:https://www.cnblogs.com/dacc123/p/11059265.html
Copyright © 2011-2022 走看看