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

    Recursive

    class Solution {
        public boolean isMatch(String s, String p) {
            return isMatch(s, 0, p, 0);
        }
        public boolean isMatch(String s, int i, String p, int j) {
            if(i==s.length()&&j==p.length())
                return true;
            if(i>s.length()||j>=p.length())
                return false;
            if(j+1<p.length()&&p.charAt(j+1)=='*')
            {
                if(isMatch(s,i,p,j+2))
                    return true;
                if(i<s.length()&&(p.charAt(j)=='.'||s.charAt(i)==p.charAt(j)))
                    if(isMatch(s,i+1,p,j))
                       return true;
            }
            if(i<s.length()&&(p.charAt(j)=='.'||s.charAt(i)==p.charAt(j)))
                return isMatch(s,i+1,p,j+1);
            return false;
        }
    }

     DP

    //isMatch(p,i,s,j)
    //if(p[i]==s[j]||p[i]=='.') isMatch(p,i-1,s,j-1)
    //if(p[i]=='*') isMatch(p,i-2,s,j)
    //if(p[i]=='*'&&(p[i-1]==s[j]||p[i-1]=='.') isMatch(p,i-1,s,j)||isMatch(p,i,s,j-1)
    class Solution {
        public boolean isMatch(String s, String p) {
            boolean[][] dp=new boolean[p.length()+1][s.length()+1];
            dp[0][0]=true;
            for(int i=1;i<=p.length();i++)
                for(int j=0;j<=s.length();j++)
                    dp[i][j]=j>0&&(p.charAt(i-1)==s.charAt(j-1)||p.charAt(i-1)=='.')&&dp[i-1][j-1]
                    ||p.charAt(i-1)=='*'&&i>1&&dp[i-2][j]
                    ||p.charAt(i-1)=='*'&&i>1&&j>0&&(p.charAt(i-2)==s.charAt(j-1)||p.charAt(i-2)=='.')&&(dp[i-1][j]||dp[i][j-1]);
            return dp[p.length()][s.length()];
        }
    }
  • 相关阅读:
    多线程的设计模式
    Deque 双端队列
    并发Queue
    并发类容器
    同步类容器
    java0926
    第十二次作业
    第十一次作业
    第十次
    第九次
  • 原文地址:https://www.cnblogs.com/asuran/p/7572647.html
Copyright © 2011-2022 走看看