Description:
Given a non-empty string s and a dictionary wordDict containing a list of non-empty words, determine if s can be segmented into a space-separated sequence of one or more dictionary words. You may assume the dictionary does not contain duplicate words.
问题描述:
判断给定的字符串能否被给定字典中的词分隔开来。。
Ex:
givens = “leetcode”,
dict = [“leet”, “code”].
Return true because “leetcode” can be segmented as “leet code”.
解法一:
思路:
动态规划,用dp[i]表示s[0…i]能够被分隔表示,用两个循环来遍历所有可能的情况,这里用的trick是s.substring()方法为前闭后开型.
所以在if逻辑中用来判断分隔字符串的衔接问题。
一旦匹配到字符串则用break退出内循环。。
Code:
public class Solution {
public boolean wordBreak(String s, List<String> wordDict) {
if(s == null && wordDict == null)
return true;
if(s == null || wordDict == null)
return false;
//dp[i] represents if s.substring(0, i) is wordbreakable.
boolean[] dp = new boolean[s.length() + 1];
dp[0] = true;
for(int i = 1; i <= s.length(); i++){
for(int j = 0; j < i; j++){
if(dp[j] && wordDict.contains(s.substring(j,i))){
dp[i] = true;
break;
}
}
}
return dp[s.length()];
}
}