2020-03-18 20:45:47

问题描述:

两个二进制串的距离是去掉最长公共前缀的长度之和。比如: 10110001011110的最长公共前缀是1011, 距离就是 len("000"+"110") = 3 + 3 = 6. 现在给一个二进制串的集合, 求两个二进制串的最大距离.

样例

样例 1:

输入:["011000","0111010","01101010"]
输出:9
解释: "0111010" 和 "01101010" 的最长前缀是 "011", 距离为 len("1010")+len("01010")=9

样例 2:

输入:["011000","0111011","01001010"]
输出:11
解释:"0111011" 和 "01001010" 的最长前缀 "01", 距离是 len("11011")+len("001010")=11

注意事项

字符串的总长度不超过 200000

问题求解:

Trie树的好题,可以先构建一棵Trie树,然后在树上进行做一次DFS就可以得到结果。

时间复杂度:O(n)

    class TrieNode {
boolean is_word;
TrieNode[] next; public TrieNode() {
is_word = false;
next = new TrieNode[2];
}
} int res = 0;
public int getAns(String[] S) {
TrieNode root = new TrieNode();
for (String s : S) {
TrieNode curr = root;
for (int i = 0; i < s.length(); i++) {
int idx = s.charAt(i) - '0';
if (curr.next[idx] == null) curr.next[idx] = new TrieNode();
curr = curr.next[idx];
}
curr.is_word = true;
}
dfs(root);
return res;
} private int dfs(TrieNode root) {
if (root == null) return 0;
int l = dfs(root.next[0]);
int r = dfs(root.next[1]);
if (l > 0 && r > 0) res = Math.max(res, l + r);
if (root.is_word && l > 0) res = Math.max(res, l);
if (root.is_word && r > 0) res = Math.max(res, r);
return 1 + Math.max(l, r);
}

  

Trie树-0/1字典树-DFS-1624. 最大距离的更多相关文章

  1. Trie树也称字典树

    Trie树 Trie树也称字典树,因为其效率很高,所以在在字符串查找.前缀匹配等中应用很广泛,其高效率是以空间为代价的. 一.Trie树的原理 利用串构建一个字典树,这个字典树保存了串的公共前缀信息, ...

  2. 字典树基础进阶全掌握(Trie树、01字典树、后缀自动机、AC自动机)

    字典树 概述     字典树,又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种.典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计.它 ...

  3. 012-数据结构-树形结构-哈希树[hashtree]、字典树[trietree]、后缀树

    一.哈希树概述 1.1..其他树背景 二叉排序树,平衡二叉树,红黑树等二叉排序树.在大数据量时树高很深,我们不断向下找寻值时会比较很多次.二叉排序树自身是有顺序结构的,每个结点除最小结点和最大结点外都 ...

  4. 字典树&&01字典树专题&&对字典树的理解

    对于字典树和01字典树的一点理解: 首先,字典树建树的过程就是按照每个数的前缀来的,如果你要存储一个全小写字母字符串,那么这个树每一个节点最多26个节点,这样的话,如果要找特定的单词的话,按照建树的方 ...

  5. POJ 2001 Shortest Prefixes 【 trie树(别名字典树)】

    Shortest Prefixes Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 15574   Accepted: 671 ...

  6. CMU 15-445 Project 0 实现字典树

    原文链接:https://juejin.cn/post/7139572163371073543 项目准备 代码.手册 本文对应 2022 年的课程,Project 0 已经更新为实现字典树了.C++1 ...

  7. [LeetCode] Implement Trie (Prefix Tree) 实现字典树(前缀树)

    Implement a trie with insert, search, and startsWith methods. Note:You may assume that all inputs ar ...

  8. [LeetCode] 208. Implement Trie (Prefix Tree) 实现字典树(前缀树)

    Implement a trie with insert, search, and startsWith methods. Example: Trie trie = new Trie(); trie. ...

  9. 【统计难题】【HDU - 1251】【map打表或字典树】【字典树模板】

    思路 题意:题目为中文题,这里不再过多阐述. 思路1:可以在读入单词表的过程中将单词分解,用map将它一 一记录 思路2:利用字典树,这个方法较快些,下面代码中会分别给出数组和结构体指针两种形式的字典 ...

随机推荐

  1. LeetCode 225题用队列实现栈(Implement Stack using Queues) Java语言求解

    链接 https://leetcode-cn.com/problems/implement-stack-using-queues/ 思路 首先演示push()操作:将元素依次进入队1,进入时用top元 ...

  2. 远程终端协议 TELNET

    远程终端协议 TELNET 1.1.概述 TELNET 是一个简单的远程终端协议,也是因特网的正式标准. 用户用 TELNET 就可在其所在地通过 TCP 连接的23端口,使用主机名或 IP 地址登录 ...

  3. 《前端面试加分项目》系列 企业级Vue瀑布流

    本文 GitHub github.com/ponkans/F2E 已收录,有一线大厂面试点思维导图,也整理了很多我的文档,欢迎Star和完善,大家面试可以参照考点复习.文末有福利~~ 前言 接水怪又来 ...

  4. getUserMedia API及HTML5 调用手机摄像头拍照

    getUserMedia API简介 HTML5的getUserMedia API为用户提供访问硬件设备媒体(摄像头.视频.音频.地理位置等)的接口,基于该接口,开发者可以在不依赖任何浏览器插件的条件 ...

  5. 零基础JavaScript编码(二)

    任务目的 在上一任务基础上继续JavaScript的体验 学习JavaScript中的if判断语法,for循环语法 学习JavaScript中的数组对象 学习如何读取.处理数据,并动态创建.修改DOM ...

  6. Python 存储数据到json文件

    1 前言 很多程序都要求用户输入某种信息,程序一般将信息存储在列表和字典等数据结构中. 用户关闭程序时,就需要将信息进行保存,一种简单的方式是使用模块json来存储数据. 模块json让你能够将简单的 ...

  7. A. New Building for SIS Codeforce

    You are looking at the floor plan of the Summer Informatics School's new building. You were tasked w ...

  8. Nginx之负载均衡配置(一)

    前文我们聊了下nginx作为反向代理服务器,代理后端动态应用服务器的配置,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/12430543.html:今天我们来聊 ...

  9. Alibaba Sentinel 限流与熔断初探(技巧篇)

    目录 1.Sentinel 是什么 ?主要能解决什么问题? 2.限流与熔断的使用场景 3.Sentinel 源码结构 4.在 IntelliJ IDEA 中运行 Sentine Demo 温馨提示:源 ...

  10. 这样阅读STM32参考手册更高效

    <STM32F103xxx参考手册>不需要全部阅读——没有时间的.建议选读,但是前几章必读.存储器和总线架构.电源控制.备份寄存器.复位和时钟控制,通用和复用功能I/O,中断和时间等等前几 ...