原题链接:https://oj.leetcode.com/problems/word-break/
题目:
Given a string s and a dictionary of words dict, determine if s can be segmented into a space-separated sequence of one or more dictionary words.
For example, given
s = "leetcode"
,
dict = ["leet", "code"]
.
Return true because "leetcode"
can be segmented as "leet code"
.
思路:对于s中起点为0的子串s.substring(0, i ),如果能找到一下标j(j<i),满足s.substring(0, j)可以被dict拆分 并且 dict.contains(s.substring(j, i)) ,那么说明截止到下标i-1,是可以被dict按照题目中指定规则拆分的。 计算过程中新建一个boolean数组resultArray,从下标0开始按照此方法逐个求出resultArray[i],最后返回resultArray[s.length()-1]即可解决问题
AC代码:
public class WordBreak {
public static boolean wordBreak(String s, Set<String> dict) {
if(s == null || s.length() == 0) {
return true;
}
if(dict.size() == 0) {
return false;
}
boolean[] resultArray = new boolean[s.length()];
if(dict.contains(s.substring(0,1))) {
resultArray[0] = true;
} else {
resultArray[0] = false;
}
for(int i=0;i<s.length();i++) {
String sub = s.substring(0, i + 1);
if(dict.contains(sub)) {
resultArray[i] = true;
continue;
}
for(int j=0;j<i;j++) {
if(resultArray[j] && dict.contains(sub.substring(j+1))) {
resultArray[i] = true;
break;
}
}
}
return resultArray[s.length() -1];
}
public static void main(String[] args) {
String s = "leetcode";
Set<String> set = new HashSet<String>();
// set.add("lee");
// set.add("t");
// set.add("code");
System.out.println(wordBreak(s, set));
}
}