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
        HashSet<String> set = new HashSet<>();
        for (String word : wordDict) {
            StringBuilder sb = new StringBuilder(word);
            sb.reverse();
            set.add(sb.toString());
        }

        int n = s.length();
        boolean[] dp = new boolean[n + 1];
        dp[0] = true;
        for (int i = 1; i <= n; i++) {
            StringBuilder cur = new StringBuilder();
            for (int j = i - 1; j >= 0; j--) {
                cur.append(s.charAt(j));
                if (set.contains(cur.toString())) {
                    dp[i] = dp[i] || dp[j];
                }
                if (dp[i] || cur.length() > 25) {
                    break;
                }
            }
        }
        return dp[n];
    }
}

编程语言是Java。

该题考察的知识点是动态规划和字符串处理。

代码简短的文字解释如下:

  1. wordDict中的单词逆序,并存储在HashSet集合set中。这样可以方便地检查一个字符串的逆序是否存在于wordDict中。
  2. 创建一个长度为n+1的布尔数组dp,其中dp[i]表示从字符串s的前i个字符能否被分割成由wordDict中的单词组成的句子。
  3. 初始化dp[0]true,表示空字符串可以被分割。
  4. 遍历字符串s,从第一个字符开始到最后一个字符:对于当前位置i,构建一个空的StringBuilder对象cur来记录从s的第i-1个字符开始往前的部分字符。从i-1往前遍历,将字符添加到cur中,并检查cur的逆序是否存在于set中。如果存在,则说明从s的第j个字符(j从i-1到0循环)到第i个字符可以被分割,此时将dp[i]标记为true。如果不存在,并且当前逆序字符串的长度超过25,说明无法继续匹配更长的字符串,跳出循环。
  5. 最后返回dp[n],即表示整个字符串s是否能够被分割成由wordDict中的单词组成的句子。
全部评论

相关推荐

二十岁的编程男神王大...:读博吧兄弟,你这绩点太好了,何必转码,另外哈哈哈真见到有括号标出来985的,这个不标注也知道吧
点赞 评论 收藏
分享
头像
04-27 15:11
已编辑
华东师范大学 算法工程师
暑期实习从2月开始投,面了两个月,流程该挂的都挂完了,腾讯字节一共号称是1.7w个hc,不知道都发给谁了,估计今年秋招要难顶。Timeline米哈游、美团、蚂蚁、微软等公司直接简历挂穿,没进面。携程:3.3&nbsp;投递、测评3.12&nbsp;笔试3.18&nbsp;一面3.25&nbsp;二面4.13&nbsp;ai面(hr面)4.14&nbsp;英语测评4.23&nbsp;offer(已拒)腾讯:2.6&nbsp;测评2.28&nbsp;wxg一面3.5&nbsp;wxg二面(挂)3.11&nbsp;teg一面3.21&nbsp;teg二面(取消)3.31&nbsp;teg一面4.10&nbsp;teg二面(挂)4.21&nbsp;wxg一面4.24&nbsp;wxg二面(挂)字节:1.28&nbsp;aml约面(取消)3.17&nbsp;火山一面(挂)4.8&nbsp;aml一面(挂)4.20&nbsp;抖音data一面(挂)阿里:3.23&nbsp;投递、测评3.28&nbsp;笔试3.31&nbsp;淘天一面4.8&nbsp;钉钉一面4.9&nbsp;淘天二面4.10&nbsp;阿里控股一面4.12&nbsp;钉钉二面(取消)4.15&nbsp;淘天hr面4.16&nbsp;淘天offer(已接)4.21&nbsp;高德一面(取消)4.22&nbsp;淘宝闪购一面(取消)面试最大的感触是,现在撞上ai转型,一堆老业务急着转向,新业务非常不成熟,研究型的组bar非常高根本进不去,业务侧挂着算法的岗位干的都是工程活,面试却又要问算法,另外agent的落地也远没有那么广,绝大多数还是那套写死的系统调一下llm&nbsp;api或者做做rag,其余少部分真的在搭agent的,基本不能在线上服务用什么很智能的模型,现阶段成本太高,进去大概率就是给垃圾模型从工程方面兜底,除了业务场景的应用和数据经验以外,技术方面很难有什么提升。算法岗做不了基模的还是去搜广推好,之前判断失误了完全没投,秋招不知道还进不进得去。
嵌入式的小白:不错啊,淘天也是挺好的,恭喜
我的求职进度条
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务