zoukankan      html  css  js  c++  java
  • [Two Sigma OA] Longest Chain

    题目:

    http://www.1point3acres.com/bbs/thread-131978-1-1.html

    实现:

    import java.util.*;
    
    /**
     * Created by Min on 10/2/2017.
     */
    public class LongestChain {
        private int getLongestChain(String[] words) {
            Map<Integer, Set<String>> map = new HashMap<Integer, Set<String>>();
            for (String word : words) {
                Set<String> set = map.get(word.length());
                if (set == null) {
                    set = new HashSet<String>();
                    map.put(word.length(), set);
                }
                set.add(word);
            }
            int ans = 0;
            List<Integer> lengthList = new ArrayList<Integer>(map.keySet());
            Collections.sort(lengthList, Collections.reverseOrder());
            return helper(0, lengthList, map, "");
        }
        private int helper(int start, List<Integer> list, Map<Integer, Set<String>> map, String prev) {
            if (start == list.size()) {
                return 0;
            }
            int ans = 0;
            if (start == 0) {
                for (String word : map.get(list.get(0))) {
                    ans = Math.max(ans, helper(start + 1, list, map, word) + 1);
                }
            } else if (prev.length() -1 == list.get(start)) {
                Set<String> wordSet = map.get(list.get(start));
                for (int i = 0; i < prev.length(); i++) {
                    String newWord = prev.substring(0, i) + prev.substring(i + 1);
                    if (wordSet.contains(newWord)) {
                        wordSet.remove(newWord);
                        ans = Math.max(ans, helper(start + 1, list, map, newWord) + 1);
                    }
                }
            }
            return ans;
        }
        public static void main(String[] args) {
            String[] input = {"a","ba","bca","bda","bdca"};
            LongestChain solution = new LongestChain();
            System.out.println(solution.getLongestChain(input));
        }
    
    }
    import java.util.*;
    
    /**
     * Created by Min on 10/2/2017.
     */
    public class LongestChain2 {
        public int getLongestChain(String[] words) {
            Set<String> set = new HashSet<String>();
            for (String word : words) {
                set.add(word);
            }
            HashMap<String, Integer> map = new HashMap<String, Integer>();
            int ans = 0;
            for (String word : words) {
                Integer length =map.get(word);
                if (length == null) {
                    length = dfs(word, map, set);
                }
                ans = Math.max(ans, length);
            }
            return ans;
        }
    
        private int dfs(String word, Map<String, Integer> map, Set<String> set) {
            Integer ans = map.get(word);
            if (ans != null) {
                return ans.intValue();
            }
            ans = 0;
            for (int i = 0; i < word.length(); i++) {
                String newWord = word.substring(0, i) + word.substring(i + 1);
                ans = Math.max(ans, dfs(newWord, map, set) + 1);
            }
            map.put(word, ans);
            return ans.intValue();
        }
        public static void main(String[] args) {
            String[] input = {"a","ba","bca","bda","bdca"};
            LongestChain2 solution = new LongestChain2();
            System.out.println(solution.getLongestChain(input));
        }
    }
  • 相关阅读:
    Ubuntu 18.04.4 系统优化
    Ubuntu 18.04.4 LTS 更换国内系统源
    django 数据库迁移
    django2.0解决跨域问题
    python requests get请求传参
    python 常用排序方法
    python 电脑说话
    centos6.x配置虚拟主机名及域名hosts
    php 合并,拆分,追加,查找,删除数组教程
    PHP统计在线用户数量
  • 原文地址:https://www.cnblogs.com/Gryffin/p/7623249.html
Copyright © 2011-2022 走看看