分析
难度 中
来源 https://leetcode.com/problems/word-break/
思路
题目
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.
Note:
- The same word in the dictionary may be reused multiple times in the segmentation.
- You may assume the dictionary does not contain duplicate words.
Example 1:
Input: s = “leetcode”, wordDict = [“leet”, “code”]
Output: true
Explanation: Return true because “leetcode” can be segmented as “leet code”.
Example 2:
Input: s = “applepenapple”, wordDict = [“apple”, “pen”]
Output: true
Explanation: Return true because “applepenapple” can be segmented as “apple pen apple”.
Note that you are allowed to reuse a dictionary word.
Example 3:
Input: s = “catsandog”, wordDict = [“cats”, “dog”, “sand”, “and”, “cat”]
Output: false
解答
Runtime: 5 ms, faster than 88.82% of Java online submissions for Word Break.
Memory Usage: 37.4 MB, less than 36.68% of Java online submissions for Word Break.
package LeetCode;
import java.util.ArrayList;
import java.util.List;
public class L139_WordBreak {
public boolean wordBreak(String s, List<String> wordDict) {
int sLen=s.length();
boolean[] dp=new boolean[sLen+1];//dp[i]表示到第i个字符的子串是否包含可以由词典构成
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]不会重复
{
dp[i]=true;
}
}
}
return dp[sLen];
}
public static void main(String[] args){
L139_WordBreak l139=new L139_WordBreak();
String s=s = "leetcode";
String[] wordDict = {"leet", "code"};
List<String> wordDictList=new ArrayList<String>();
for(int i=0;i<wordDict.length;i++)
{
wordDictList.add(wordDict[i]);
}
System.out.println(l139.wordBreak(s,wordDictList));
}
}