题目

https://leetcode.com/problems/map-sum-pairs/

题解

基于前缀树实现,可以参考:leetcode 208. Implement Trie (Prefix Tree) | 208. 实现 Trie 前缀树(Java) 中的数据结构,然后加以改造即可。

上代码。其中,insert() 函数的四个分类 存在 不存在 末尾 非末尾 是需要注意的细节。

class Node {Node[] map;int[] value;public Node() {this.map = new Node['z' - 'a' + 1];this.value = new int['z' - 'a' + 1];}public Node getNode(char c) {return map[c - 'a'];}public int getValue(char c) {return value[c - 'a'];}public Node put(char c, int val) { // 新建node,会破坏后续节点Node node = new Node();map[c - 'a'] = node;value[c - 'a'] = val;return node;}public Node set(char c, int val) { // 仅覆盖value,保留后续节点value[c - 'a'] = val;return map[c - 'a'];}
}class MapSum {Node node;/*** Initialize your data structure here.*/public MapSum() {node = new Node();}public void insert(String key, int val) {Node cur = node;for (int i = 0; i < key.length(); i++) {if (cur.getNode(key.charAt(i)) != null) { // 存在if (i == key.length() - 1) { // 末尾cur = cur.set(key.charAt(i), val);} else { // 非末尾cur = cur.getNode(key.charAt(i));}} else { // 不存在if (i == key.length() - 1) { // 末尾cur = cur.put(key.charAt(i), val);} else { // 非末尾cur = cur.put(key.charAt(i), 0);}}}}public int sum(String prefix) {Node cur = node;int sum = 0;for (int i = 0; i < prefix.length(); i++) {if (cur.getNode(prefix.charAt(i)) == null) { // 走投无路,匹配失败return 0;} else {if (i == prefix.length() - 1) { // 当前字母是prefix的结尾字母sum = cur.getValue(prefix.charAt(i));}cur = cur.getNode(prefix.charAt(i));}}return dfs(cur, sum);}public int dfs(Node node, int sum) {for (int i = 0; i < node.map.length; i++) {if (node.map[i] != null) {sum += node.value[i];sum = dfs(node.map[i], sum);}}return sum;}
}/*** Your MapSum object will be instantiated and called as such:* MapSum obj = new MapSum();* obj.insert(key,val);* int param_2 = obj.sum(prefix);*/

leetcode 677. Map Sum Pairs | 677. 键值映射(Trie前缀树,BFS)相关推荐

  1. 字典树/Trie/前缀树-LeetCode总结:720词典中最长的单词;127. 单词接龙;677. 键值映射;面试题 17.17. 多次搜索;648. 单词替换

    MyTrie结构体和相关操作函数 typedef struct MyTrie {bool is_word;vector<MyTrie*> next;MyTrie():is_word(fal ...

  2. 【快乐水题】677. 键值映射

    原题: 力扣链接:677. 键值映射 题目简述: 实现一个 MapSum 类,支持两个方法,insert 和 sum: MapSum() 初始化 MapSum 对象 void insert(Strin ...

  3. null索引表键值_MySQL 的B+树索引

    一.B+树索引概述 索引是应用程序设计和开发的一个重要方面.若索引太多,应用程序的性能可能会受到影响(需维护索引的结构和数据):而索引太少,对查询性能又会产生影响. 二叉树,左子树的键值总是小于根的键 ...

  4. Unity中的输入事件总结与数字电视遥控器键值映射

    版权声明:欢迎批评指正,转载请务必注明原文链接:欢迎文章下公开讨论. https://blog.csdn.net/cordova/article/details/51036547 一.Unity的基本 ...

  5. 键盘动态库开发(修改键值映射和键盘灯控制)

    键盘动态库开发(修改键值映射和键盘灯控制) 开发需求 键盘DLL功能 1. 键盘OPEN 2. 键盘CLOSE 3. 键盘灯控制 4. 键值抓取 开发需求 需求:开发一款9键键盘DLL和演示程序,要求 ...

  6. leetcode 676. Implement Magic Dictionary | 676. 实现一个魔法字典(DFS+Trie 前缀树)

    题目 https://leetcode.com/problems/implement-magic-dictionary/description/ 题解 题意理解 前缀树问题,大意是是让你在字典中找到是 ...

  7. 【LeetCode】【HOT】208. 实现 Trie (前缀树)

    [LeetCode][HOT]208. 实现 Trie (前缀树) 文章目录 [LeetCode][HOT]208. 实现 Trie (前缀树) package hot;public class So ...

  8. Leetcode 208.实现 Trie (前缀树)(Implement Trie (Prefix Tree))

    Leetcode 208.实现 Trie (前缀树) 1 题目描述(Leetcode题目链接)   实现一个 Trie (前缀树),包含 insert, search, 和 startsWith 这三 ...

  9. Leetcode典型题解答和分析、归纳和汇总——T208(实现Trie前缀树)

    问题描述: 实现一个Trie前缀树,包含insert.search和startsWith这三个操作. 问题分析: 这类的题目与堆栈的最小元素查找类似,将所有功能进行集中处理. 首先我们需要明确一下tr ...

最新文章

  1. LeetCode简单题之在既定时间做作业的学生人数
  2. 获取局域网打印机列表
  3. BZOJ.5249.[九省联考2018]iiidx(贪心 线段树)
  4. 世界级安全技术专家力作——《Linux防火墙》
  5. 数学建模第五节2020.5.8-17补
  6. 为什么c语言软件调试不出来,急急急……求指导,程序调试不出来
  7. android布局黑色字体颜色,Android开发之FloatingActionButton悬浮按钮基本使用、字体、颜色用法示例...
  8. (7)Linux进程调度-O(1)调度算法
  9. 数据科学包2-pandas快速入门1
  10. Java学习笔记--反射API
  11. 使用Maven 插件构建docker 镜像和推送仓库
  12. cpu win10 安装yolo_Win10 超详细 0基础 搭建YOLOV5教程【环境搭建篇】
  13. WordPress直接调用头像地址
  14. ubuntn 常用命令和快捷键汇总
  15. python抓取谷歌app市场的icon
  16. 6410裸机加载linux内核,KG—Tiny6410裸机环境搭建(补充篇)
  17. 【ps功能精通】3.图层和选取
  18. python图像处理学习笔记
  19. [LeetCode]506. Relative Ranks
  20. 子组件向父组件传递数据_如何将元素引用向下传递到角度的组件树中

热门文章

  1. 算法模板-对称性递归
  2. 安卓进阶系列-03上弹选择框(PopupDialog)的使用
  3. Unhandled promise rejection Error: errCode: -501007 invalid parameters | errMsg: Invalid Key Name: _
  4. 棋子--状态压缩dp
  5. 关于int main(int argc,char *argv[])
  6. HDU3549(最大流算法的Dinic算法)
  7. Win32多线程编程(5) — 线程局部存储
  8. 交换机网络嗅探方法之欺骗交换机缓存
  9. 读《Android 安全架构深究》
  10. 看完这篇文章,我奶奶都懂了https的原理