件名: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);を返します。
}