public class WordBreak2 {
List<String> strList = new ArrayList<String>();
/* 动态规划 */
public List<String> wordBreak(String s, Set<String> dict) {
if (s == null)
return null;
Object[] dfs = new Object[s.length() + 1];
dfs[0] = new ArrayList<String>();
List<String> strlist = null;
boolean flag[] = new boolean[s.length() + 1];
flag[0] = true;
boolean indict = false;
for (int i = 1; i <= s.length(); i++) {
strlist = new ArrayList<String>();
indict = false;
for (String temp : dict) {
int length = temp.length();
if (length > i) {
if (!indict)
flag[i] = false;
continue;
}
if (s.substring(i - length, i).equals(temp) && flag[i - length]) {
strlist.add(temp);
flag[i] = true;
indict = true;
// break;
}
if (!indict)
flag[i] = false;
}
dfs[i] = strlist;
}
if (flag[s.length()]) {
DFS(dfs, flag, s.length(), "");
}
return strList;
}
public void DFS(Object dfs[], boolean flag[], int end, String str) {
if (end == 0)
strList.add(str.trim());
List<String> list = (List<String>) dfs[end];
for (String temp : list) {
if (flag[end - temp.length()]) {
// str = str + " " + temp;
DFS(dfs, flag, end - temp.length(), temp + " " + str);
}
}
}
}
leetcode -- word break II
最新推荐文章于 2022-02-13 19:30:15 发布