当前位置: 首页 > news >正文

Leetcode 3213. Construct String with Minimum Cost

  • Leetcode 3213. Construct String with Minimum Cost
    • 1. 解题思路
    • 2. 代码实现
  • 题目链接:3213. Construct String with Minimum Cost

1. 解题思路

这一题的话思路上还是比较直接的,就是一个trie树加一个动态规划,通过trie树来快速寻找每一个位置作为起点时能够匹配的全部字符串,然后用一个动态规划来获取最优剪切方案。

其中,关于trie树的内容可以参考我之前的博客《经典算法:Trie树结构简介》,这里就不过多展开了。

然后当前的实现其实还蛮暴力的,时间上勉勉强强通过了全部测试样例,不过应该可以通过剪枝以及优化trie树内的内容来进行一下优化,有兴趣的读者可以考虑一下其具体实现,这里就不过多进行展开了。

2. 代码实现

给出python代码实现如下:

class Trie:def __init__(self):self.trie = {}def add_word(self, word, cost):trie = self.triefor c in word:trie = trie.setdefault(c, {})if "eos" not in trie:trie["eos"] = (word, cost)elif cost < trie["eos"][1]:trie["eos"] = (word, cost)returndef find_all_prefix(self, word):prefixs = []trie = self.triefor c in word:if c not in trie:breaktrie = trie[c]if "eos" in trie:prefixs.append(trie["eos"])return prefixsclass Solution:def minimumCost(self, target: str, words: List[str], costs: List[int]) -> int:trie = Trie()for word, cost in zip(words, costs):trie.add_word(word, cost)n = len(target)ans = math.inf@lru_cache(None)def dp(idx):nonlocal ansif idx >= n:return 0prefixs = trie.find_all_prefix(target[idx:])if prefixs == []:return math.infreturn min(c + dp(idx+len(w)) for w, c in prefixs)ans = dp(0)return ans if ans != math.inf else -1

提交代码评测得到:耗时10897ms,占用内存267.2MB。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 开源模型应用落地-LangChain高阶-智能体探究-agent类型(一)
  • 【Linux】解锁权限的神秘面纱,让你的系统更安全、更高效!
  • 多线程爬虫技术详解
  • 数据结构--二叉树和堆
  • Python语法基础
  • 微信小程序-组件样式隔离
  • Docker的安装及使用摘要
  • AiPPT的成功之路:PMF付费率与增长策略
  • 美股交易相关知识点 持续完善中
  • 基于SpringBoot+Vue的招生管理系统(带1w+文档)
  • VSCode使用ipynb文件高效地进行功能测试
  • ArduPilot开源飞控之AP_VisualOdom
  • STM32快速复习(八)SPI通信
  • Git管理源代码、git简介,工作区、暂存区和仓库区,git远程仓库github,创建远程仓库、配置SSH,克隆项目
  • Centos7开放端口
  • 【5+】跨webview多页面 触发事件(二)
  • axios 和 cookie 的那些事
  • DOM的那些事
  • ES6 学习笔记(一)let,const和解构赋值
  • HTTP中的ETag在移动客户端的应用
  • IDEA 插件开发入门教程
  • JavaScript-Array类型
  • Java超时控制的实现
  • oschina
  • socket.io+express实现聊天室的思考(三)
  • 聚簇索引和非聚簇索引
  • 看域名解析域名安全对SEO的影响
  • 如何设计一个微型分布式架构?
  • 使用Envoy 作Sidecar Proxy的微服务模式-4.Prometheus的指标收集
  • 首页查询功能的一次实现过程
  • 自制字幕遮挡器
  • Redis4.x新特性 -- 萌萌的MEMORY DOCTOR
  • 京东物流联手山西图灵打造智能供应链,让阅读更有趣 ...
  • #我与Java虚拟机的故事#连载12:一本书带我深入Java领域
  • $ is not function   和JQUERY 命名 冲突的解说 Jquer问题 (
  • (1)(1.9) MSP (version 4.2)
  • (173)FPGA约束:单周期时序分析或默认时序分析
  • (3)STL算法之搜索
  • (汇总)os模块以及shutil模块对文件的操作
  • (九十四)函数和二维数组
  • (离散数学)逻辑连接词
  • (三)SvelteKit教程:layout 文件
  • (十八)三元表达式和列表解析
  • **PHP二维数组遍历时同时赋值
  • **PHP分步表单提交思路(分页表单提交)
  • .bashrc在哪里,alias妙用
  • .config、Kconfig、***_defconfig之间的关系和工作原理
  • .NET Framework 的 bug?try-catch-when 中如果 when 语句抛出异常,程序将彻底崩溃
  • .NET 反射 Reflect
  • .NET 使用配置文件
  • .NET 事件模型教程(二)
  • .Net 执行Linux下多行shell命令方法
  • .net 逐行读取大文本文件_如何使用 Java 灵活读取 Excel 内容 ?
  • .NetCore实践篇:分布式监控Zipkin持久化之殇
  • .Net面试题4