描述
给定一个字符串s和一组单词dict,判断s是否可以用空格分割成一个单词序列,使得单词序列中所有的单词都是dict中的单词(序列可以包含一个或多个单词)。
例如:
给定s=“nowcode”;
dict=[“now”, “code”].
返回true,因为"nowcode"可以被分割成"now code".
https://www.nowcoder.com/practice/5f3b7bf611764c8ba7868f3ed40d6b2c?tpId=46&tqId=29041&tPage=1&rp=1&ru=/ta/leetcode&qru=/ta/leetcode/question-ranking
解题思路:动态规划
问题:字符串是否可以成功分割
子问题;单词前几个字符是否可以成功分割
状态F(i):单词前i个字符是否可以成功分割
转移方程:1.判断前i个字符整体是否可以在词典中找到
2.j<i && F(j) && [j+1,i]是否可以在词典中找到
代码如下:
import java.util.*;
public class Solution {
public boolean wordBreak(String s, Set<String> dict) {
if(s.length()==0) return false;
boolean[]canbreak=new boolean[s.length()+1];
for(int i=1;i<=s.length();i++){
//先判断整体是否可以在词典里找到
if(dict.contains(s.substring(0,i))){
canbreak[i]=true;
continue;
}
//再判断F[j]&& [j+1,i]是否可以在词典里找到
for(int j=1;j<i;j++){
if(canbreak[j] && dict.contains(s.substring(j,i))){
canbreak[i]=true;
break;
}
}
}
return canbreak[s.length()];
}
}