leetcode-10。正規表現マッチング

件名:https : //leetcode-cn.com/problems/regular-expression-matching/

問題解決:

例果p.charAt(j)== s.charAt(i):dp [i] [j] = dp [i-1] [j-1];
如果p.charAt(j)== '。' :dp [i] [j] = dp [i-1] [j-1];
如果p.charAt(j)== '*':
如果p.charAt(j-1)!= s.charAt(i ):dp [i] [j] = dp [i] [j-2] //この場合、a *は空としてのみカウントされます
結果としてp.charAt(j-1)== s.charAt(i)またはp .charAt(j-1)== '。':
dp [i] [j] = dp [i-1] [j] //この場合、a *は複数のa
またはdp [i] [j] としてカウントされます= dp [i] [j-1] //この場合、a *は単一のaとしてカウントされます
またはdp [i] [j] = dp [i] [j-2] //この場合、a *は次のようにカウントされます空の

回答:(動的プログラミング)

public boolean isMatch(String s、String p){

        int m = s.length();

        int n = p.length();

        boolean [] [] status = new boolean [m + 1] [n + 1];

        status [0] [0] = true;

        for(int i = 0; i <= m; i ++){

            for(int j = 1; j <= n; j ++){

                if(p.charAt(j-1)== '*'){

                     status [i] [j] = status [i] [j-2];

                    if(matches(s、p、i、j-1)){

                        status [i] [j] = status [i] [j] || status [i-1] [j];

                    }

                }そうしないと{

                    if(matches(s、p、i、j)){

                        status [i] [j] = status [i-1] [j-1];

                    }

                }

            }

        }

        ステータスを返す[m] [n];

    }

 

    public boolean matches(String s、String p、int i、int j){

        if(i == 0){

            falseを返します。

        }

        if(p.charAt(j-1)== '。'){

            trueを返します。

        }

        s.charAt(i-1)== p.charAt(j-1);を返します。

    }

おすすめ

転載: blog.csdn.net/wuqiqi1992/article/details/108547145
おすすめ