动态规划----6.单词拆分
139. 单词拆分 - 力扣(LeetCode)
/**
visited[]:记录结果,visited[i]代表s中的前i个字符构成的单词在wordDict是否存在
visited[0] = true,其余初始化为false; 0代表空字符串初始化为true;其余通过后续递推更改状态
word.length--> len
前1个字符构成的单词(s[0,1 - 1]):visited[1] = true --> 1 >= len && visited[1 - len] && s.substring(1 - len, 1).equals(word)
当前前1个字符组成的单词足够匹配wordDict中的单词(1 >= len) 且前1 - len个字符构成的单词在wordDict中存在(s[0,1-len)) 且当前[1-len,1)的len个单词在wordDict是否存在
前2个字符构成的单词(s[0,2 - 1]):visited[1] = true --> 2 >= len && visited[2 - len] && s.substring(2 - len, 2).equals(word)
当前前2个字符组成的单词足够匹配wordDict中的单词(2 >= len) 且前2 - len个字符构成的单词在wordDict中存在(s[0,2-len)) 且当前[2-len,2)的len个单词在wordDict是否存在
........
前i个字符构成的单词(s[0,i - 1]):visited[i] = true --> i >= len && visited[i - len] && s.substring(i - len, i).equals(word)
当前前i个字符组成的单词足够匹配wordDict中的单词(i >= len) 且前i - len个字符构成的单词在wordDict中存在(s[0,i-len)) 且当前[i-len,i)的len个单词在wordDict是否存在
即若当前已处理到的字符长度为i,待匹配的单词长度为len,则若前i - len个单词成功匹配 且 后len个单词也匹配成功,则说明当前前i个字符匹配成功
*/
class Solution {/**visited[]:记录结果,visited[i]代表s中的前i个字符构成的单词在wordDict是否存在visited[0] = true,其余初始化为false; 0代表空字符串初始化为true;其余通过后续递推更改状态word.length--> len 前1个字符构成的单词(s[0,1 - 1]):visited[1] = true --> 1 >= len && visited[1 - len] && s.substring(1 - len, 1).equals(word) 当前前1个字符组成的单词足够匹配wordDict中的单词(1 >= len) 且前1 - len个字符构成的单词在wordDict中存在(s[0,1-len)) 且当前[1-len,1)的len个单词在wordDict是否存在前2个字符构成的单词(s[0,2 - 1]):visited[1] = true --> 2 >= len && visited[2 - len] && s.substring(2 - len, 2).equals(word) 当前前2个字符组成的单词足够匹配wordDict中的单词(2 >= len) 且前2 - len个字符构成的单词在wordDict中存在(s[0,2-len)) 且当前[2-len,2)的len个单词在wordDict是否存在........前i个字符构成的单词(s[0,i - 1]):visited[i] = true --> i >= len && visited[i - len] && s.substring(i - len, i).equals(word) 当前前i个字符组成的单词足够匹配wordDict中的单词(i >= len) 且前i - len个字符构成的单词在wordDict中存在(s[0,i-len)) 且当前[i-len,i)的len个单词在wordDict是否存在即若当前已处理到的字符长度为i,待匹配的单词长度为len,则若前i - len个单词成功匹配 且 后len个单词也匹配成功,则说明当前前i个字符匹配成功*/public boolean wordBreak(String s, List<String> wordDict) {int n = s.length();boolean[] dp = new boolean[n + 1];Arrays.fill(dp, false);dp[0] = true;for(int i = 1; i <= n; i++) {for(String word : wordDict) {int len = word.length();if(i >= len && dp[i - len] && s.substring(i - len,i).equals(word)) {dp[i] = true;break;}}}return dp[n];}
}