题解 | #训练聪明的牛# 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)
  • 字符串处理
  • 集合和数组的使用

代码解释大纲:

  1. 导入所需的java.util包。
  2. 创建一个名为Solution的类。
  3. 编写一个名为wordBreak的公共方法,接受一个字符串s和一个字符串数组wordDict作为参数,并返回一个布尔值。
  4. 在方法内部,首先将字符串数组wordDict转换为一个集合wordDictSet,方便后续查找操作。
  5. 创建一个布尔数组dp,长度为s.length() + 1,用于记录字符串s的拆分情况。初始化时,将dp[0]设置为true,表示空字符串可以被拆分。
  6. 使用两层循环遍历字符串s(外层循环变量 i),以及每个子串的结束位置(内层循环变量 j)。
  7. 对于每个子串,使用内层循环来判断前面的子串是否可以被拆分,并且后面的子串是否在字典中存在。
  8. 如果满足上述条件,则将 dp[i] 设置为 true,并跳出内层循环。
  9. 最终返回 dp[s.length()],表示整个字符串s是否可以被拆分成字典中的单词序列。
全部评论

相关推荐

03-11 20:17
浙江大学 Java
蝴蝶飞出了潜水钟丿:浙江大学加粗加艺术字加特效加特技加加加....然后随便投就行了
点赞 评论 收藏
分享
海螺很能干:每次看到这种简历都没工作我就觉得离谱
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务