次の Java + 動的プログラミングの実装 ( https://pingzhblog.wordpress.com/2015/09/17/word-break/ )を理解しようとしています。
public class Solution {
public boolean wordBreak(String s, Set<String> wordDict) {
if(s == null) {
return false;
}
boolean[] wordBreakDp = new boolean[s.length() + 1];
wordBreakDp[0] = true;
for(int i = 1; i <= s.length(); i++) {
for(int j = 0; j < i; j++) {
String word = s.substring(j, i);
if(wordBreakDp[j] && wordDict.contains(word)) {
wordBreakDp[i] = true;
break;
}
}
}//end for i
return wordBreakDp[s.length()];
}
}
ただし、 と について明確にする必要がString s = "abcxyz"
ありSet <String> wordDict = ["z", "xy", "ab", "c"]
ます。
何が何を表しているのかはまだ不明wordBreakDp[]
であり、1 つを true に設定することは意味します。
だから私は試みて得ましたがwordBreakDP[2,3,5,6]=true
、それらのインデックスは何を教えてくれますか? i=6
チェックしているのは の最後のインデックスwordBreakDp[]
が true であるかどうかだけなので、チェックできなかったのwordBreakDp[s.length()];
でしょうか?
たとえば、 を取得ab
したとしますが、次のループが役に立たず、ループの外にあるとs.substring(0, 2);
どのように仮定できるでしょうか?s.substring(1, 2);
break;
ありがとうございました