• Trie树-0/1字典树-DFS-1624. 最大距离


    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);
        }
    

      

  • 相关阅读:
    【SDOI2015】星际战争
    【雅礼联考DAY02】Magic
    【SDOI2015】排序
    【雅礼联考DAY01】逃跑
    【雅礼联考DAY01】数列
    【雅礼联考DAY02】Revolution
    Philips and Calculator
    maven整理——初步
    等价类划分方法分析与应用
    @Autowired
  • 原文地址:https://www.cnblogs.com/hyserendipity/p/12520081.html
Copyright © 2020-2023  润新知