[Two Sigma OA] Longest Chain

编程入门 行业动态 更新时间:2024-10-28 16:25:54

OAds/image/0663.jpg" alt="[Two Sigma OA] Longest Chain"/>

[Two Sigma OA] Longest Chain

题目:

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

 

转载于:.html

更多推荐

[Two Sigma OA] Longest Chain

本文发布于:2024-02-13 01:48:49,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1690238.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:OA   Sigma   Chain   Longest

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!