zoukankan      html  css  js  c++  java
  • 18.7 一组字符串里找最长的可以用其他字符串表示的字符串。

    用HashMap缓存记录结果,以防止重复计算。

    枚举分割点,dfs。

    注意单词本身不能由单词本身构成,需要isOrigin符号判断下。

    import java.util.Arrays;
    import java.util.Comparator;
    import java.util.HashMap;
    
    public class Solution {
    
        public static String getLongestWord(String[] list) {
            HashMap<String, Boolean> map = new HashMap<String, Boolean>();
            for (String str : list) {
                map.put(str, true);
            }
    
            Arrays.sort(list, new Comparator<String>() {
    
                public int compare(String a, String b) {
                    return ((Integer) b.length()).compareTo(a.length());
                }
    
            });
    
            for (String each : list) {
                if (canBuild(map, each, list, true))
                    return each;
            }
    
            return "";
        }
    
        private static boolean canBuild(HashMap<String, Boolean> map, String word, String[] list, boolean isOriginWord) {
            if (map.containsKey(word) && !isOriginWord)
                return map.get(word);
            for (int i = 1; i < word.length(); i++) {
                String left = word.substring(0, i);
                if (map.containsKey(left) && map.get(left) == true) {
                    if (canBuild(map, word.substring(i), list, false))
                        return true;
                }
            }
            map.put(word, false);
            return false;
    
        }
    
        public static void main(String[] args) {
            String[] list = { "abc", "bc", "c", "b" };
            System.out.println(getLongestWord(list));
        }
    }
  • 相关阅读:
    div常用设置
    Chrome-Charset——Chrome最新版右键工具中的编码修改功能没有了的解决工具
    PHP数据访问(面向对象方式:mysqli类)
    JSON
    jQuery
    jQuery事件
    会话保持
    查询的例子,房屋租赁
    PHP CRUD
    批量删除
  • 原文地址:https://www.cnblogs.com/jdflyfly/p/3937296.html
Copyright © 2011-2022 走看看