class Solution { /** * 举个例子: * dp["onetwothreefour"] = dp["onetwothree"这一段] && 判断一下"four" */ public boolean wordBreak(String s, List<String> wordDict) { Set<String> wordSet = new HashSet<>(wordDict); int n = s.length(); // dp[i] 表示 s 中以 i-1 结尾的字符串是否可被 wordDict 拆分 boolean[] dp = new boolean[n + 1]; dp[0] = true; // 空串是可以被拆分成功的: for (int i = 1; i <= n; i++) { for (int j = 0; j < i; j++) { // 如果 j 之前的可以拆分 就判断 j..i-1是否在字典中, if (dp[j] && wordSet.contains(s.substring(j, i))) { dp[i] = true; break; } } } return dp[n]; } }