Java for LeetCode 140 Word Break II

Given a string s and a dictionary of words dict, add spaces in s to construct a sentence where each word is a valid dictionary word.

Return all such possible sentences.

For example, given
s = "catsanddog",
dict = ["cat", "cats", "and", "sand", "dog"].

A solution is ["cats and dog", "cat sand dog"].

解题思路:

参考上题思路二的解法,修改下代码,让其显示路径即可,JAVA实现如下:

static public List<String> wordBreak(String s, Set<String> wordDict) {
		List<String> list = new ArrayList<String>();
		dfs(list, s, wordDict, new HashSet<String>(), new ArrayList<String>());
		return list;
	}

	static public boolean dfs(List<String> list, String s, Set<String> dict,
			Set<String> unmatch, List<String> alist) {
		boolean isMatch=false;
		for (String prefix : dict) {
			if (s.equals(prefix)) {
				alist.add(prefix);
				StringBuilder sb = new StringBuilder();
				for (String str : alist) {
					sb.append(str);
					sb.append(" ");
				}
				list.add(sb.substring(0, sb.length() - 1));
				alist.remove(alist.size() - 1);
				isMatch=true;
				continue;
			} else if (s.startsWith(prefix)) {
				String suffix = s.substring(prefix.length());
				if (!unmatch.contains(suffix)) {
					alist.add(prefix);
					if (!dfs(list, suffix, dict, unmatch, alist))
						unmatch.add(suffix);
					else isMatch=true;
					alist.remove(alist.size() - 1);
				}
			}
		}
		return isMatch;
	}
原文地址:https://www.cnblogs.com/tonyluis/p/4551337.html