如何将给定文本分解为字典中的单词?

2023-12-20

这是一道面试题。假设你有一个字符串text and a dictionary(一组字符串)。你如何崩溃text成子串,使得每个子串都可以在dictionary.

例如你可以分解"thisisatext" into ["this", "is", "a", "text"] using /usr/share/dict/words.

我相信回溯可以解决这个问题(在伪Java中):



void solve(String s, Set<String> dict, List<String> solution) {
   if (s.length == 0)
      return
   for each prefix of s found in dict
      solve(s without prefix, dict, solution + prefix)
}

List<String> solution = new List<String>()
solve(text, dict, solution)
  

是否有意义?您会优化在字典中搜索前缀的步骤吗?您会推荐哪些数据结构?


该解决方案假设字典存在 Trie 数据结构。进一步,对于Trie中的每个节点,假设以下功能:

  1. node.IsWord() :如果该节点的路径是单词,则返回 true
  2. node.IsChild(char x):如果存在标签为 x 的子节点,则返回 true
  3. node.GetChild(char x):返回标签为x的子节点
Function annotate( String str, int start, int end, int root[], TrieNode node):
i = start
while i<=end:
    if node.IsChild ( str[i]):
        node = node.GetChild( str[i] )
        if node.IsWord():
            root[i+1] = start
        i+=1
    else:
        break;

end = len(str)-1
root = [-1 for i in range(len(str)+1)]
for start= 0:end:
    if start = 0 or root[start]>=0:
        annotate(str, start, end, root, trieRoot)

index  0  1  2  3  4  5  6  7  8  9  10  11
str:   t  h  i  s  i  s  a  t  e  x  t
root: -1 -1 -1 -1  0 -1  4  6 -1  6 -1   7

我将把通过反向遍历根来列出组成字符串的单词的部分留给您。

时间复杂度为 O(nk),其中 n 是字符串的长度,k 是字典中最长单词的长度。

PS:我假设字典中有以下单词:this,is,a,text,ate。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将给定文本分解为字典中的单词? 的相关文章

  • 有向无环图的拓扑排序为阶段

    是否有一种算法 给定一个未加权的有向无环图 将所有节点排序到节点集列表中 使得 拓扑顺序被保留 即 对于所有边u gt v v出现在列表中更靠下的集合中u and 列表的长度是最小的 这个问题有名字吗 Example 下图的一种可能的排序是
  • 快速排序优化

    我正在学习排序算法 下一步 我试图让我的实现接近std sort 到目前为止我还很远 我有 3 个快速排序的实现 标准快速排序 使用临时数组 quicksort with following optimizations median3 用于
  • 当元组列表中相同项目的值是字符串时,对它们的值求和

    如果我有这样的元组列表 my list books 5 books 10 ink 20 paper 15 paper 20 paper 15 我怎样才能把列表变成这样 books 15 ink 20 paper 50 即添加同一项目的费用
  • Android 中 DatatypeConverter.printHexBinary(byte[] array) 和 DatatypeConverter.parseHexBinary(String str) 的替代方案

    有什么替代方案DatatypeConverter printHexBinary byte array and DatatypeConverter parseHexBinary String str 在安卓中 Android 没有 class
  • 你能用 Swift 计算一个字符串吗?

    我有一个变量 并且有一个以字符串形式存储在其中的函数 var x func myFunction y Int println y 有没有办法评估字符串并运行函数 No 没有等效的eval https developer mozilla or
  • 根据先前日期进行预测:值数据

    我有一些类似时期的数据集 这是当时人们的介绍 时间大约有一年 数据并不是定期收集的 而是相当随机的 每年 15 30 个条目 来自 5 个不同的年份 The graph drawn from the data for each year l
  • 用于查找遍历图中所有顶点的路线的更好算法是什么?

    所以我有以下问题 给定 x x y 维度的网格 计算路线数 穿过它 从一个角开始 假设左上角 并结束于 另一个 右下 并穿过每个顶点 因此 我当前的方法只是通过尝试每条可能的路径并计算到达终点并遍历每个节点的路径来进行暴力破解 虽然它有效
  • 从txt文件java中删除一行[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我有一个大文件 我只需要删除其中的几行 有没有办法在不打开新文件并复制整个文本的情况下执行此操作 编辑 主要问题是当它在多个带有大 t
  • 什么是 NOR 逻辑运算符?

    Is nor a 或 b a 或 b a 和 b 还有什么吗 a 或 b see http en wikipedia org wiki Logical NOR http en wikipedia org wiki Logical NOR了解
  • 用二进制数、常规数字和格雷编码填充矩阵

    我有一个包含 1 s 或 0 s 的矩阵 用于创建二进制数 其宽度为n 对于 n 2 和 n 3 它看起来像 00 000 01 001 10 010 11 011 100 101 110 111 等等 现在我正在使用以下代码来生成它 in
  • C++ 中的字符串到 LPCWSTR

    我正在尝试从字符串转换为 LPCWSTR 我使用多位 1 例如 LPCWSTR ToLPCWSTR string text LPCWSTR sw LPCWSTR text c str return sw 2 返回中文字符 LPCWSTR T
  • Java中如何将Object[]转换为String[]?

    我有一个关于 Java 的问题 我有一个Object Java默认的 不是用户定义的 我想将它转换为String 谁能帮我 谢谢 这是转换 for int i 0 i lt objectArr length i try strArr i o
  • 将带有两层分隔符的字符串转换为字典 - python

    给定一个字符串 s x t1 ny t2 nz t3 我想转换成字典 sdic x 1 y 2 z 3 我通过这样做让它工作 sdic dict tuple j split t for j in i for i in s split n F
  • 在大文件中查找重复字符串

    一个文件包含大量 例如100亿 字符串 您需要查找重复的字符串 您有 N 个可用系统 您将如何找到重复项 埃里克森的答案可能是提出这个问题的人所期望的 您可以将 N 台机器中的每台机器用作哈希表中的一个存储桶 对于每个字符串 按顺序说出字符
  • 如何解决素数函数的大O表示法?

    我正在尝试理解 Big O 表示法 很抱歉 如果我问的问题太明显了 但我似乎无法理解这一点 我有以下 C 代码函数 我正在尝试为其计算 Big O 表示法 for i 2 i lt 100 i for j 2 j lt i j j if i
  • 在python中将列表转换为字符串

    我对 python 语言相当陌生 我一直在寻找这个问题的答案 我需要一个如下所示的列表 Kevin went to his computer He sat down He fell asleep 转换为如下字符串 Kevin went to
  • std::regex 转义正则表达式中使用的特殊字符

    我是字符串来创建一个std regex FILE 作为单元测试的一部分 检查一些打印文件名的异常输出 在 Windows 上失败并显示 regex error error escape 表达式包含无效的转义字符或尾随转义 因为 FILE 宏
  • 快速算法可以快速找到一组范围中某个数字所属的范围?

    场景 我有几个数字范围 这些范围不重叠 由于它们不重叠 逻辑结果是任何时候任何数字都不能属于多个范围 每个范围都是连续的 单个范围内没有空洞 因此范围 8 到 16 将真正包含 8 到 16 之间的所有数字 但两个范围之间可能存在空洞 例如
  • Nothing = String.Empty (为什么它们相等?)

    为什么第一个 if 语句的计算结果为 true 我知道如果我使用 is 而不是 那么它的计算结果不会为 true 如果我将 String Empty 替换为 Foo 它的计算结果不会为 true String Empty 和 Foo 都具有
  • 为什么循环引导迭代算法的数组大小必须为 3^k+1?

    The 循环引导迭代算法 http www geeksforgeeks org an in place algorithm for string transformation 是一种通过将所有偶数项移至前面并将所有奇数项移至后面同时保留其相

随机推荐

  • MFCC 的含义

    我有一个概念问题 我知道什么是梅尔标度以及它代表什么 而且我知道这种频谱图仍然包含太多我需要的信息 我认为如果我们想减少频谱图的信息数量 我们可以使用 MFCC 但我实在不明白MFCC是什么以及它代表什么 我在语音识别过程中使用 MFCC
  • 如何在保留子目录的同时拆分 git 存储库?

    我想要的是类似于这个问题 https stackoverflow com questions 359424 detach subdirectory into separate git repository 但是 我希望拆分为单独存储库的目录
  • F# ionide webshaperserverclient - 如何运行

    我跑步时遇到问题websharperserverclient来自 ionide 项目生成器的模板应用程序 并且在网上找不到任何如何操作的信息 我得到的最接近的东西是这个问题 https stackoverflow com questions
  • 纯JSP页面导航最佳实践?

    在我的 Web 应用程序的各个 JSP 页面之间实现导航链接的最佳方法是什么 假设我有一个list jsp显示项目列表 然后 用户单击其中一项以查看该项目的更多详细信息view jsp 现在我需要一个链接view jsp回到list jsp
  • 我可以使用模型绑定验证 HTTP 请求签名令牌和随机数吗?

    我正在使用 ASP NET MVC 设置一个端点 可以向该端点发出操作和检索数据的请求 基本上是一个 API 我使用 2 legged OAuth 模型来验证请求是否使用密钥和签名方法以及随机数表进行签名 以防止劫持 由于模型绑定在 ASP
  • PHP flock() - 幕后是什么?

    在与 PHP 源码搏斗了半个小时后 我放弃了 P 问题是 在 Gentoo Linux 系统上 PHP freeze 函数调用归结为什么系统调用 我遇到了一些问题 比如每 20 次循环迭代中阻塞 30 秒类问题 我想知道为什么会这样 exa
  • 为什么我在 vue js 中收到“无法读取未定义的属性‘状态’”错误

    我的 store index js 是 import Vue from vue import Vuex from vuex Vue use Vuex export default new Vuex Store state name Alic
  • 反应挂钩。定期运行 useEffect

    我需要定期获取数据并将其更新到屏幕上 我有这个代码 const temperature setTemperature useState useEffect gt fetch urlToWeatherData then function re
  • 从 Excel 中包含逗号分隔值的两个单元格中提取公共值

    有没有一种简单的方法可以从两个以逗号分隔的数字单元格中提取共同的数字 我有单元格 每个单元格中有 12 个逗号分隔的数字 它们并不都是唯一的 有些数字可以重复两次 但不能超过两次 数字都是正数 并且只能是一位或两位数字 我的数据是这样的 它
  • 解析“DateTime.Now”?

    我需要翻译这样的字符串 DateTime Now AddDays 7 转化为它们的等价表达式 我只对 DateTime 类感兴趣 Net 中是否有内置的东西可以帮助我做到这一点 或者我只需要编写自己的小解析器 您可以雇用FLEE http
  • 通知点击事件时的通话活动

    我想在用户下拉通知并点击该通知时调用该活动 我怎样才能做到这一点 Call setLatestEventInfo on the Notification对象 提供一个PendingIntent当他们点击通知抽屉中的您的条目时 就会开始您的活
  • Cypress:使用 cy.intercept() 检查是否尚未进行调用?

    使用 cy intercept 拦截 和存根 几个网络请求 到谷歌标签管理器 但希望在我的测试中尽早进行测试 然后再期望它们被调用 我将如何测试我正在拦截的两条路线haven t被叫了吗 Thanks 您可以利用cy spy命令 cy in
  • 如何在 django admin 中显示布尔属性

    众所周知 显示method在 Django 管理中将值返回为布尔值可以通过设置轻松完成boolean属性 class MyModel models Model def is something self if self something
  • Visual Studio 2022 挂起并显示“正在打开文件...”消息

    当我尝试打开 dbml 文件时 Visual Studio 2022 挂起并显示 正在打开文件 消息 当我打开任何其他文件时不会发生这种情况 我尝试通过以下方式解决这个问题 卸载Devexpress 卸载Visual Studio 2022
  • 通过过滤将消息从 Amazon SNS 路由到 SQS

    在 RabbitMQ 中 可以创建一个交换器 然后将其绑定到多个队列 每个队列都有一个路由键 这使得消息传递架构如下所示 message x foo msg q bar msg q msg logger q 客户端发布消息到message
  • 意外的关键字参数“缓冲” - python 客户端

    我收到错误 getresponse 收到意外的关键字参数 缓冲 完整的错误日志是 INFO Kivy v1 8 0 INFO Logger Record log in C Users Sudheer kivy logs kivy 14 08
  • MySQL select DATETIME 类似到分钟

    我必须比较两个表之间相对于同一时间的结果 但时间戳因记录方式而有所不同 我想获得像这样的结果实施例1但我只得到带星号的值 如实施例2 从比较中删除秒或选择与最接近的 DATETIME 值相对应的值的最佳方法是什么 目前我正在使用这个查询 S
  • 无法接收已发布的消息以在 mqtt paho 上订阅主题

    我正在使用 paho 发送和接收 mqtt 消息 到目前为止 发送消息没有任何问题 我在接收它们时遇到问题 我的代码是 package BenchMQTT import org eclipse paho client mqttv3 IMqt
  • Python SMTPLIB,SSL 库错误 --> smtplib.SMTPAuthenticationError: (535, b'5.7.8 用户名和密码不被接受)

    我的 python 程序有问题 我已在程序中输入了有关我的电子邮件和密码的正确信息 但错误如下所示 import smtplib SSL email email protected cdn cgi l email protection pa
  • 如何将给定文本分解为字典中的单词?

    这是一道面试题 假设你有一个字符串text and a dictionary 一组字符串 你如何崩溃text成子串 使得每个子串都可以在dictionary 例如你可以分解 thisisatext into this is a text u