题解 | #训练聪明的牛# java
训练聪明的牛
https://www.nowcoder.com/practice/971090dbcf5043e295b4ea7f6ec85311
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param s string字符串
* @param wordDict string字符串一维数组
* @return bool布尔型
*/
public boolean wordBreak (String s, String[] wordDict) {
// write code here
Set<String> wordDictSet = new HashSet<>(Arrays.asList(wordDict));
boolean[] dp = new boolean[s.length() + 1];
dp[0] = true;
for (int i = 1; i <= s.length(); i++) {
for (int j = 0; j < i; j++) {
if (dp[j] && wordDictSet.contains(s.substring(j, i))) {
dp[i] = true;
break;
}
}
}
return dp[s.length()];
}
}
该代码使用的是Java编程语言。
知识点:
- 动态规划(Dynamic Programming)
- 字符串处理
- 集合和数组的使用
代码解释大纲:
- 导入所需的
java.util包。 - 创建一个名为
Solution的类。 - 编写一个名为
wordBreak的公共方法,接受一个字符串s和一个字符串数组wordDict作为参数,并返回一个布尔值。 - 在方法内部,首先将字符串数组
wordDict转换为一个集合wordDictSet,方便后续查找操作。 - 创建一个布尔数组
dp,长度为s.length() + 1,用于记录字符串s的拆分情况。初始化时,将dp[0]设置为true,表示空字符串可以被拆分。 - 使用两层循环遍历字符串
s(外层循环变量i),以及每个子串的结束位置(内层循环变量j)。 - 对于每个子串,使用内层循环来判断前面的子串是否可以被拆分,并且后面的子串是否在字典中存在。
- 如果满足上述条件,则将
dp[i]设置为true,并跳出内层循环。 - 最终返回
dp[s.length()],表示整个字符串s是否可以被拆分成字典中的单词序列。

