采访Q表示扁平化

时间:2015-10-01 01:40:45

标签: java algorithm

有这个面试问题。

编写一个函数来展平dicts数组 EXAMPLE_INPUT:
example_input = [{a:{b:{c:{d:'e'}}}}, {a:{b:{c:{d:{e:'f'}}}}}]
example_output:[{a_b_c_d:'e'}, {a_b_c_d_e:'f'}]

  1. 如何在java中建模此输入?
  2. 如何用Java解决这个问题。
  3. 上述输入可以映射到哪种数据结构?

    class Node {
       String s;
       Node node;
    }
    

    我尝试使用此Node类导致{node:{node:{node:{s:'value'}而不是{a:{b:{c:{d:'e'}}}}以上。

2 个答案:

答案 0 :(得分:1)

不要忘记字典是成对classpath 'com.android.tools.build:gradle:1.1.0'的集合,其中包含密钥唯一的不变量。所以你可以把它们表示为:

(key, value)

其中class Dict { List<Pair> pairs; }

Pair

或者如果你想要更一般的概念:

class Pair {
    String key;
    Dict value;
}

请注意,您可以将单个值表示为class Pair<T> { T key; Dict value; } Dict,其值为Pair。然后你的展平功能无效

null

答案 1 :(得分:0)

您可以使用实现以下界面的两个类对输入进行建模:

public interface Node {
  public Map<String, String> flatten(String prefix);
}

字符串节点:

public class StringNode implements Node {
  private String nodeString;
  public StringNode(String s){
    this.nodeString = s;
  }
  public Map<String, String> flatten(String prefix){
    Map<String, String> map = new HashMap<String, String>();
    map.put(prefix, nodeString);
    return map;
  }
}

字典节点:

public class DictNode extends HashMap<String, Node> implements Node {
  public Map<String, String> flatten(String prefix){
    Map<String, String> map = new HashMap<String, String>();
    if ( prefix.length() > 0 ) prefix = prefix + "_";
    for ( String key : keySet() ) {
      map.putAll(get(key).flatten(prefix + key));
    }
    return map;
  }
}

现在,您唯一需要做的就是在节点上调用flatten方法   使用空字符串参数值,您将获得扁平字典。