word break ii java_WordBreakII.java

import java.util.ArrayList;

import java.util.HashMap;

import java.util.LinkedList;

import java.util.List;

import java.util.Map;

import java.util.Set;

/**

* 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"].

*/

public class WordBreakII {

public ArrayList wordBreak(String s, Set dict) {

Map wordMap = new HashMap();

for (String w : dict) {

wordMap.put(w, true);

}

int len = s.length();

boolean[] strMap = new boolean[len + 1];

ArrayList sols = new ArrayList();

strMap[0] = true;

for (int i = 1; i <= len; i++) {

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

String ww = s.substring(j, i);

if (strMap[j] && wordMap.containsKey(ww)) {

strMap[i] = true;

}

}

}

if (!strMap[len])

return sols;

List sb = new LinkedList();

search(s, dict, 0, len, strMap, sb, sols);

return sols;

}

private void search(String s, Set dict, int st, int len,

boolean[] strMap, List sb, ArrayList sols) {

if (st >= len) {

StringBuffer sbf = new StringBuffer();

for (String ss : sb) {

sbf.append(" ");

sbf.append(ss);

}

sols.add(sbf.toString().trim());

} else {

for (int ll = st + 1; ll <= len; ll++) {

String tmp = s.substring(st, ll);

if (strMap[st] && dict.contains(tmp)) {

sb.add(tmp);

int last = sb.size() - 1;

search(s, dict, ll, len, strMap, sb, sols);

sb.remove(last);

}

}

}

}

}

一键复制

编辑

Web IDE

原始数据

按行查看

历史

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值