牛客NC181 单词拆分(一)【中等 动态规划,前缀树 Java,Go,PHP】

题目

在这里插入图片描述
题目链接:
https://www.nowcoder.com/practice/c0d32c1ce5744472a01b2351a2c2767f

思路

前缀树+动态规划

参考答案Java

import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可*** @param s string字符串* @param dic string字符串一维数组* @return bool布尔型*/public boolean wordDiv (String s, String[] dic) {//前缀树+动态规划PreTreeNode trie = new PreTreeNode();for (String s1 : dic) {add(trie, s1);}int n = s.length();boolean[] dp = new boolean[n + 1];dp[n] = true;for (int i = n - 1; i >= 0 ; i--) {PreTreeNode cur = trie;for (int j = i; j < n ; j++) {char c = s.charAt(j);cur = cur.nexts.get(c);if (cur == null) break;if (cur.end > 0) {dp[i] = dp[i] | dp[j + 1];}}}return dp[0];}static class PreTreeNode {int pass = 0;int end = 0;Map<Character, PreTreeNode> nexts = new HashMap<>();}public void add(PreTreeNode root, String word) {if (word == null || word.length() == 0) return;PreTreeNode cur = root;cur.pass++;for (int i = 0; i < word.length() ; i++) {char c = word.charAt(i);if (!cur.nexts.containsKey(c))cur.nexts.put(c, new PreTreeNode());cur = cur.nexts.get(c);cur.pass++;}cur.end++;}
}

参考答案Go

package main/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可*** @param s string字符串* @param dic string字符串一维数组* @return bool布尔型*/
func wordDiv(s string, dic []string) bool {//前缀树+动态规划trie := &PreTreeNode{0, 0, map[byte]*PreTreeNode{}}for i := 0; i < len(dic); i++ {trie.Add(dic[i])}n := len(s)dp := make([]bool, n+1)dp[n] = truefor i := n - 1; i >= 0; i-- {cur := triefor j := i; j < n; j++ {c := s[j]tmp, ok := cur.nexts[c]if !ok {break}cur = tmpif tmp.End > 0 {dp[i] = dp[i] || dp[j+1]}}}return dp[0]
}type PreTreeNode struct {Pass intEnd  intnexts map[byte]*PreTreeNode
}func (node *PreTreeNode) Add(word string) {if len(word) == 0 {return}cur := nodecur.Pass++for i := 0; i < len(word); i++ {c := word[i]_, ok := cur.nexts[c]if !ok {cur.nexts[c] = &PreTreeNode{0, 0, map[byte]*PreTreeNode{}}}cur = cur.nexts[c]cur.Pass++}cur.End++}

参考答案PHP

<?php/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** * @param s string字符串 * @param dic string字符串一维数组 * @return bool布尔型*/
function wordDiv( $s ,  $dic )
{// 前缀树+动态规划$trie = new Node();foreach ($dic as $word){add($trie,$word);}$n = strlen($s);$dp= array();$dp[$n] = true;for($i=$n-1;$i>=0;$i--){$cur = $trie;for($j=$i;$j<$n;$j++){$c = $s[$j];$cur =$cur->nexts[$c];if($cur==null ||empty($cur))break;if($cur->end >0){$dp[$i]=$dp[$i] ||$dp[$j+1];}}}return $dp[0];
}class Node{public $pass = 0;public $end =0;public $nexts = array();
}//添加到单词到前缀树
function add(&$root,$word){$cur =$root;$cur->pass++;for($i=0;$i<strlen($word);$i++){$c = $word[$i];if(!isset($cur->nexts[$c])){$cur->nexts[$c] = new Node();}$cur = $cur->nexts[$c];$cur->pass++;}$cur->end++;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/798039.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GO并发总是更快吗?

许多开发人员的一个误解是,并发解决方案总是比串行更快,大错特错。解决方案的整体性能取决于许多因素,例如,结构的效率(并发)、可以并行处理的部分以及计算单元的竞争程度。 1. GO调度 线程是操作系统可以执行的最小单元。如果一个进程想要同时执行多个动作,它可以启动…

LeetCode 264 丑数II

题目信息 LeetoCode地址: . - 力扣&#xff08;LeetCode&#xff09; 题目理解 所谓丑数就是满足: (2^x)*(3^y)*(5^z), 其中,x,y,z > 0的数。 题目要求的是求严格递增的第n个丑数。 最小堆写法 可以维护一个小顶堆&#xff0c;每一次拿出堆顶元素&#xff0c;然后分别…

OpenCV4.9处理平滑图像

返回&#xff1a;OpenCV系列文章目录&#xff08;持续更新中......&#xff09; 上一篇&#xff1a;使用OpenCV4.9的随机生成器和文本 下一篇&#xff1a;OpenCV系列文章目录&#xff08;持续更新中......&#xff09; 目标 在本教程中&#xff0c;您将学习如何使用 OpenCV …

助力瓷砖生产智造,基于YOLOv5全系列参数【n/s/m/l/x】模型开发构建瓷砖生产制造场景下1280尺寸瓷砖表面瑕疵检测识别系统

砖生产环节一般经过原材料混合研磨、脱水、压胚、喷墨印花、淋釉、烧制、抛光&#xff0c;最后进行质量检测和包装。得益于产业自动化的发展&#xff0c;目前生产环节已基本实现无人化。而质量检测环节仍大量依赖人工完成。一般来说&#xff0c;一条产线需要配数名质检工&#…

【三十三】【算法分析与设计】回溯(1),46. 全排列,78. 子集,没有树结构,但是依旧模拟树结构,回溯,利用全局变量+递归函数模拟树结构

46. 全排列 给定一个不含重复数字的数组 nums &#xff0c;返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。 示例 1&#xff1a; 输入&#xff1a;nums [1&#xff0c;2&#xff0c;3] 输出&#xff1a;[[1&#xff0c;2&#xff0c;3]&#xff0c;[1&#xff0c;3&a…

【C++】C++ primer plus 第七、八章--函数

函数指针 使用typedef声明函数指针 typedef const double* (*p)(const double*, int);const double* func1(const double* a, int b){auto *c = new(double);*c = *a * b;return c; } // p则可以作为函数指针类型 p f = func1; 内联函数 使用关键字inline声明,在编译过程中…

缺陷检测项目 | 使用OpenCV实现纺织品表面缺陷检测

项目应用场景 面向纺织品表面缺陷检测场景&#xff0c;使用 OpenCV 来实现&#xff0c;因此无需深度学习复杂的训练流程&#xff0c;实现起来会更加便捷。 项目效果&#xff1a; 项目细节 > 具体参见项目 README.md 项目采用 VisualStudio C# 开发&#xff0c;所以用 Visua…

详解SPWM与SVPWM的原理、算法以及两者的区别

详解SPWM与SVPWM的原理、算法以及两者的区别 1、SPWM与SVPWM 2、SPWM与SVPWM的原理 2.1 SPWM原理 2.2 SVPWM原理 3、SPWM与SVPWM的算法 3.1 SPWM算法 3.2 SVPWM 算法 4、SPWM和SVPWM的对比 5、总结 1、SPWM与SVPWM 所谓SPWM,就是在PWM的基础上改变了调制脉冲方式,…

AcWing---转圈游戏---快速幂

太久没写快速幂了... 这是一道数学题orz&#xff0c;能看出来的话答案就是 &#xff0c;但是很大&#xff0c;同时还要mod n&#xff0c;直接用快速幂即可。 快速幂模版&#xff1a; long long int power(long long int a,long long int b,long long int mod){long long int r…

golang特性3

golang特性 通过通信共享内存 在 Go 中&#xff0c;通信共享内存是通过通道来实现的。Go 语言的设计哲学之一就是“不要通过共享内存来通信&#xff0c;而应通过通信来共享内存”。这意味着不鼓励直接在多个协程之间共享内存&#xff0c;而是通过通道进行数据交换&#xff0c…

C语言.指针(4)

指针&#xff08;4&#xff09; 1.回调函数是什么&#xff1f;2.qsprt使用举例2.1使用qsort函数排序整型数据2.2使用qsort函数排序结构体数据 3.qsort函数的模拟实现 1.回调函数是什么&#xff1f; 回调函数就是一个通过函数指针调用的函数 如果你把函数的指针&#xff08;地址…

Java集合体系面试题

1. Java中有哪些主要的集合接口&#xff1f; 答案&#xff1a;Java中主要的集合接口有Collection、List、Set、Queue和Map。 2. 请解释List和Set之间的主要区别。 答案&#xff1a;List和Set的主要区别在于元素的顺序和唯一性。List是有序的集合&#xff0c;允许存储重复的元…

PHP安装swoole拓展

一&#xff1a;下载swoole拓展 PHP的swoole拓展下载地址&#xff1a;https://pecl.php.net/package/swoole wget http://pecl.php.net/get/swoole-4.2.12.tgz二&#xff1a;安装swoole拓展 1&#xff1a;解压swoole拓展包 tar xzvf swoole-4.2.12.tgz cd swoole-4.2.122&am…

pandas(day6 图表)

一. 计算效率 1. 测量代码运行时间 %%time %%timeit 单纯计算 代码块执行的时长 %%time _sum(np.arange(6)) CPU times: total: 0 ns Wall time: 1.66 ms用于多次运行代码块并计算平均执行时间 %%timeit _sum(np.arange(6))738 ns 10.7 ns per loop (mean std. dev. of 7…

java常用设计模式介绍及代码示例

设计模式是在软件设计中发现、研究和应用的一种有效方法。设计模式并不直接转化成代码&#xff0c;而是提供了解决某一问题的框架。下面介绍一些常用的设计模式以及对应的Java代码示例&#xff1a; 1. 单例模式&#xff1a;确保某一个类只有一个实例&#xff0c;同时提供一个访…

java流式计算Stream

java流式计算Stream 流(Stream)到底是什么呢? 是数据渠道&#xff0c;用于操作数据源&#xff08;集合、数组等&#xff09;所生成的元素序列。 “集合讲的是数据&#xff0c;流讲的是计算! ” 特点&#xff1a; Stream自己不会存储元素。 Stream不会改变源对象。相反&#x…

金三银四面试题(十六):MySQL面试都问什么(1)

在开发岗位面试中&#xff0c;MySQL基本是必考环节。所以接下来我们就进入MySQL八股文环节&#xff0c;看看都有哪些高频考题。 MySQL 中有哪些不同的表格&#xff1f; 在MySQL中&#xff0c;可以创建多种不同类型的表格&#xff0c;其中一些常见的类型包括&#xff1a; InnoD…

代码随想录第18天: 二叉树part05

力扣513 找树左下角的值 class Solution {public int findBottomLeftValue(TreeNode root) {Queue<TreeNode> que new LinkedList<>();que.offer(root);int res 0;while(!que.isEmpty()) {int size que.size();for(int i 0; i < size; i) {TreeNode tmp q…

Git(8)之分支间同步特定提交

Git(8)之分支间同步特定提交 Author&#xff1a;Once Day Date&#xff1a;2024年4月7日 漫漫长路有人对你微笑过嘛… 全系列文章可查看专栏: Git使用记录_Once_day的博客-CSDN博客 文章目录 Git(8)之分支间同步特定提交1. 分支间同步提交2. cherry-pick同步分支间的特定提交…

docker打包haproxy并代理web或mysql集群

1、需求&#xff1a; 使用haproxy代理两个服务&#xff08;web服务或者是mysql服务&#xff09; 2、编写Dockerfile 2.1、创建Dockerfile专用目录 mkdir /docker/images/haproxy -p && cd /docker/images/haproxy 2.2、下载软件包到Dockerfile专用目录 curl -O h…