java - 检查列表中的字符串是否可以由同一列表中的元素串联形成
问题描述
检查列表中的字符串是否可以由同一列表中的元素串联形成
例如:
输入列表 -
{ best, rockstar, star, guide, bestguide, rock }
输出 :-
rockstar -> rock, star
bestguide -> best, guide
在这里,“摇滚明星”可以用摇滚和明星组成。类似地,“bestguide”可以通过连接“best”和“guide”来形成。
到目前为止我的解决方案 - 通过相互连接创建所有字符串组合(2 个字符串在一起,3 个字符串在一起,依此类推)并存储在地图中。
地图结构可以如下
Map<String, List<String>>
{rockstar : [rock, star], ....}
现在检查只是遍历原始列表并检查地图。如果找到它,那么它是一种可能的解决方案。
寻找具有更好时间/空间复杂度的更好解决方案
解决方案
我认为一种标准方法可能是从字典中构造一个 trie。然后对于每个候选者,遍历特里树,当匹配路径到达末尾(标记一个较小的单词)时,再次从特里树的顶部继续使用候选者的剩余后缀。如果存在类似匹配,我们可能需要对每个候选人进行几次回溯试验;但是在只有 10,000 个的字典中,除非数据是退化的,否则这些平均应该很少。
推荐阅读
- swift - 下载后如何使用照片而无需再次下载?(在 Swift 中)
- python-3.x - Pytorch 灰度输入到 Vgg
- excel - 从用户突出显示的单元格创建具有特定格式的图形
- neo4j - Neo4j Cypher 命令删除节点和与之关联的唯一约束?
- python-3.x - Python:确定 SQL 选择列表中的 Oracle 数据库列数据类型
- c++ - 使用openCV捕获相机帧的延迟
- javascript - 多个点击计数器,每个计数器都有唯一值
- salesforce - 从文本区域字段中删除/替换/替换文本
- javascript - 使用javascript按顺序解决promise /从内容CMS做出反应
- react-map-gl - 地图组件仅部分显示图层:React Map GL 3.X 到 5.X 升级