class Solution {
public boolean wordBreak(String s, List<String> wordDict) {
if(wordDict.size()==0){
return false;
}
int[] dp = new int[s.length()];
dp[0] = (wordDict.indexOf(s.substring(0,1))>=0) ? 1 : 0;
for(int i=1;i<dp.length;i+=1){
for(int k=i;k>=0;k-=1){
if(k>0){
if(dp[k-1]==1){
//进行判断
if(wordDict.indexOf(s.substring(k,i+1))>=0){
dp[i]=1;
}
}
}
else{
if(wordDict.indexOf(s.substring(0,i+1))>=0){
dp[i]=1;
}
}
}
}
return dp[dp.length-1]==1;
}}
使用动态规划解决这道题
首先明确dp数组的含义,dp[i]指前i个字符组成的字符串能否被单词拆分
这道题的动态规划思路是对当前字符和距离其最近的可拆分字符串之间的字符能否组成在字典中出现的单词,如果不能则需要继续找下一个距离最近可拆分字符串,求出其中的字符。