java - 选择一种数据结构来存储句子中的单词及其起始位置

标签 java data-structures hashmap sentence

我正在准备面试,经常出现的问题之一是:

呈现一个句子(例如,这首歌是最好的歌曲),分为单词和单词第一个字母的索引,即“the” - 0, 12; “歌曲”- 4,21; "is"- 9; “最好”- 16;选择一个数据结构来存储该信息,并使用该数据结构重建句子。

我最初的尝试是将单词存储在 HashMap 中,其中键是单词,值是位置数组。这是完全可行的,但由于嵌套的 for 循环和边界索引处的烦人问题、在适当位置的空间中读取等而变得相当复杂。

我已经完成了代码,所以如果有人想看,我会发布(它很长,读起来很引人入胜!!)

无论如何,对于我的问题:任何人都可以提出一种更有效的表示和重建数据的方法吗?我很想尝试另一种方法,但这就是我迄今为止想到的所有方法

最佳答案

作为面试不同技能水平的候选人的人,我希望面试者在决定最终数据结构之前提出更多问题。

  • 数据会专门用于重建句子吗?如果是这样,最好有一个列表。
  • 您需要能够查找单词位置吗?如果是这样,那么你的结构就很好。
  • 对于使用此数据的句子,您可能还会问哪些其他问题?

一种选择是为每个单独的单词创建一个 WordPosition 对象,其中包含该单词、其位置以及对下一个单词的引用。这些将形成一个链表,使得重建句子成为一个简单的有序遍历。将它们存储在 map 中,以单词作为键,并为每个单词提供一个 WordPosition 列表。

关于java - 选择一种数据结构来存储句子中的单词及其起始位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10081800/

相关文章:

java - 按下并拖动鼠标时忽略 .setOnMouseMoved()

javascript - 如何在 JavaScript 中实现哈希表

java - 哈希表 ||哈希码查找如何保持不变

java - HashMap 对于不同的键是线程安全的吗?

c++ - 使用自动引用类在 C++ 中创建堆栈时出现问题

java - Java 中的多键到单值映射

java - 将 java 从 1.8.0_77 更新到 1.8.0_121 后,JAXB 不会解码

java - 如何为线程创建方法?

java - 如何通过 Java 代码中的 SpEL 表达式选择 Tomcat context.xml 参数

c - FreeBSD 数据结构与通信