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

news2024/12/22 15:03:42

题目

在这里插入图片描述
题目链接:
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] = true
	for i := n - 1; i >= 0; i-- {
		cur := trie
		for j := i; j < n; j++ {
			c := s[j]
			tmp, ok := cur.nexts[c]
			if !ok {
				break
			}
			cur = tmp

			if tmp.End > 0 {
				dp[i] = dp[i] || dp[j+1]
			}
		}
	}

	return dp[0]
}

type PreTreeNode struct {
	Pass int
	End  int

	nexts map[byte]*PreTreeNode
}

func (node *PreTreeNode) Add(word string) {
	if len(word) == 0 {
		return
	}

	cur := node
	cur.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.coloradmin.cn/o/1564530.html

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

相关文章

Flutter Don‘t use ‘BuildContext‘s across async gaps.

Flutter提示Don‘t use ‘BuildContext‘s across async gaps.的解决办法—flutter里state的mounted属性

基于Pytorch+昇腾NPU部署baichuan2-7B大模型

一、模型介绍 Baichuan 2 是百川智能推出的新一代开源大语言模型&#xff0c;采用 2.6 万亿 Tokens 的高质量语料训练。Baichuan 2 在多个权威的中文、英文和多语言的通用、领域 benchmark 上取得同尺寸最佳的效果。 它基于 Transformer 结构&#xff0c;在大约1.2万亿 tokens…

EasyExcel 模板导出excel、合并单元格及单元格样式设置。 Freemarker导出word 合并单元格

xls文件&#xff1a; 后端代码&#xff1a; InputStream filePath this.getClass().getClassLoader().getResourceAsStream(templateFile);// 根据模板文件生成目标文件ExcelWriter excelWriter EasyExcel.write(orgInfo.getFilename()).excelType(ExcelTypeEnum.XLS).withTe…

NIO基础知识

在学习Netty之前先要学习一下NIO相关的知识&#xff0c;因为Netty是基于NIO搭建的一套网络编程框架。 一. NIO 基础 non-blocking io 非阻塞 IO 1. 三大组件 1.1 Channel & Buffer channel 有一点类似于 stream&#xff0c;它就是读写数据的双向通道&#xff0c;可以从…

01-​JVM学习记录-类加载器

一、类加载器子系统 1. 作用-运输工具&#xff08;快递员&#xff09; 负责从文件系统或者网络中加载Class文件&#xff08;DNA元数据模板&#xff09;&#xff0c;Class文件开头有特定标识&#xff0c;魔术&#xff0c;咖啡杯壁&#xff08;class文件存于本地硬盘&#xff0c…

通过Telnet访问网络设备

要通过 Telnet 访问网络设备&#xff0c;需要通过Console端口对网络设备进行基本配置&#xff0c;例如&#xff0c;IP地址、子网掩码、用户名和登录密码等。本实验以路由器为例&#xff0c;交换机远程管理只是接口名字不同而已&#xff0c;路由器用物理接口&#xff0c;交换机用…

Word的”交叉引用“和”插入题注“快捷键设置

Word的”交叉引用“和”插入题注“快捷键设置 在MSWord2021中&#xff0c;可以自定义设置快捷键。方法如下&#xff1a;文件-选项-自定义功能区-键盘快捷方式&#xff08;自定义&#xff09;。具体过程如图所示。 最后&#xff0c;按照上述流程将插入题注&#xff08;Insert…

数据结构进阶篇 之【选择排序】详细讲解(选择排序,堆排序)

民以食为天&#xff0c;我以乐为先 嘴上来的嘘寒问暖&#xff0c;不如直接打笔巨款 一、选择排序 1.直接选择排序 1.1 基本思想 1.2 实现原理 1.3 代码实现 1.4 直接选择排序的特性总结 2.堆排序 跳转链接&#xff1a;数据结构 之 堆的应用 二、完结撒❀ –❀–❀–❀…

拥塞控制算法系列之:Swift-谷歌2020年SIGCOM-包级别端到端TIMELY拥塞控制算法

核心要点&#xff1a; 谷歌 2020 SIGCOM基于delay的AIMD拥塞拆分EC和FC&#xff0c;时延敏感场景优势分别计算EC和FC的wnd&#xff08;最核心&#xff09;保障吞吐和低延迟。Swift 因利用延迟的简单性和有效性而闻名包级别的论文&#xff1a;https://dl.acm.org/doi/pdf/10.11…

防止linux出现大量 FIN_WAIT1

netstat 查看系统连接情况&#xff0c;出现 FIN_WAIT1&#xff1a; 当连接数多时&#xff0c;经常出现大量FIN_WAIT1,可以修改 /etc/sysctl.conf以下参数&#xff1a; net.ipv4.tcp_fin_timeout 10net.ipv4.tcp_keepalive_time 30net.ipv4.tcp_window_scaling 0net.ipv4.tc…

吴恩达机器学习笔记:第 6 周-11机器学习系统的设计(Machine Learning System Design)11.1-11.2

目录 第 6 周 11、 机器学习系统的设计(Machine Learning System Design)11.1 首先要做什么11.2 误差分析11.3 类偏斜的误差度量 第 6 周 11、 机器学习系统的设计(Machine Learning System Design) 11.1 首先要做什么 在接下来的视频中&#xff0c;我将谈到机器学习系统的设…

springdoc-openapi-用户界面如何将请求设置为HTTPS

一、问题描述 当我们的服务接口需要通过HTTPS访问时&#xff0c;通过swagger可视化页面请求接口的时候&#xff0c;发起的是HTTP请求&#xff0c;导致请求无法到达后端&#xff0c;影响测试。 二、解决方法 1、将服务的地址添加到配置文件中 swagger:server-list: #本地环境…

ubuntu-server部署hive-part3-安装mysql

参照 https://blog.csdn.net/qq_41946216/article/details/134345137 操作系统版本&#xff1a;ubuntu-server-22.04.3 虚拟机&#xff1a;virtualbox7.0 部署mysql 下载上传 下载地址 https://downloads.mysql.com/archives/community/ 以root用户上传&#xff0c;/usr/loc…

【信贷后台管理系统之axios的二次封装(四)】

文章目录 一、axios的二次封装二、配置后端接口地址三、登录接口api联调四、贷款申请接口api编写联调 一、axios的二次封装 示例&#xff1a;pandas 是基于NumPy 的一种工具&#xff0c;该工具是为了解决数据分析任务而创建的。 src下新建utils,新建request.js用来封装axios 控…

Set a Light 3D Studio:探索光影艺术的全新维度mac/win中文版

Set a Light 3D Studio 是一款领先的三维建模和渲染软件&#xff0c;它将设计师、艺术家和摄影师的创意想法转化为生动逼真的三维场景。这款软件以其强大的功能和直观的界面&#xff0c;成为行业内众多专业人士的首 选工具。 set.a.light 3D STUDIO中文版软件获取 在Set a Lig…

unity shader学习练笔日记(一)

1、简单顶点/片元着色器 Shader "Unity Shaders Study/Day One/Simple Shader" {Properties{//声明一个Color类型的属性_Color ("Color Tint", Color) (1.0, 1.0, 1.0, 1.0)}SubShader{Pass{CGPROGRAM#pragma vertex vert#pragma fragment frag//在CG代码…

【Go】十八、管道

文章目录 1、管道2、管道的定义3、管道的关闭4、管道的遍历5、管道 协程6、只读、只写管道7、管道的阻塞8、select 1、管道 channel本质是一个队列&#xff0c;先进先出自身线程安全&#xff0c;多协程访问时&#xff0c;不用加锁&#xff0c;channel本身就是线程安全的一个s…

OpenCV 笔记(28):图像降噪算法——中值滤波、高斯滤波

1. 图像噪声 图像降噪(Image Denoising)是指从图像中去除噪声的过程&#xff0c;目的是提高图像质量&#xff0c;增强图像的视觉效果。 图像噪声是指图像中不希望出现的随机亮度或颜色变化&#xff0c;通常会降低图像的清晰度和可辨识度&#xff0c;以及会降低图像的质量并使图…

DFS:深搜+回溯+剪枝解决排列、子集问题

创作不易&#xff0c;感谢三连支持&#xff01;&#xff01; 一、全排列I . - 力扣&#xff08;LeetCode&#xff09; class Solution { public://全局变量vector<vector<int>> ret;vector<int> path;bool check[6];vector<vector<int>> perm…

【NLP】LLM 和 RAG

在这里&#xff0c;我描述了我在过去几年中关于 RAG 系统如何发展的主要经验。分享 Naive RAG、Advanced RAG 和 Modular RAG 框架之间的区别。总结了高云帆等人发表的一篇出色的RAG 技术调查论文的关键见解。 什么是 RAG 框架&#xff1f; OpenAI的GPT系列、Meta的LLama系列…