Java 扁平化口述的访谈Q
我有这个面试问题 编写一个函数来展平DICT数组 输入示例:Java 扁平化口述的访谈Q,java,algorithm,Java,Algorithm,我有这个面试问题 编写一个函数来展平DICT数组 输入示例: 示例_input=[{a:{b:{c:{d:'e'}}},{a:{b:{c:{d:{e:'f'}}] 示例输出:[{a_b_c_d:'e'},{a_b_c_d_e:'f'}] 如何用java对输入进行建模 如何用Java解决这个问题 上面的输入可以映射到什么样的数据结构 class Node { String s; Node node; } 我尝试使用这个节点类,它将导致{Node:{Node:{Node:{s:'val
示例_input=
[{a:{b:{c:{d:'e'}}},{a:{b:{c:{d:{e:'f'}}]
示例输出:
[{a_b_c_d:'e'},{a_b_c_d_e:'f'}]
class Node {
String s;
Node node;
}
我尝试使用这个节点类,它将导致{Node:{Node:{Node:{s:'value'}
而不是上面的{a:{b:{c:{d:'e'}}}}
不要忘记,字典是一组成对的(键,值)
,具有键是唯一的不变量。因此,您可以将它们表示为:
类Dict{
列表对;
}
其中,对
为
类对{
字符串键;
Dict值;
}
或者,如果您想要更一般的概念:
类对{
T键;
Dict值;
}
请注意,您可以将单个值表示为一对与值null
的Dict
Dict展平(Dict-Dict){
Dict new_Dict=new Dict();
for(配对:dict.pairs){
if(pair.value==null)
新建目录对。添加(对);
其他的
new_dict.pairs.addAll(组合(pair.key,展平(pair.value));
}
}
列表组合(字符串键,Dict值){//这里的值是一个扁平Dict
列表对=新的ArrayList();
for(对:value.pairs){
pairs.add(新对(key+“”+Pair.key,Pair.value));
}
返回对;
}
您可以使用实现以下接口的两个类对输入进行建模:
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;
}
}
公共类StringNode实现节点{
私有字符串节点限制;
公共字符串节点(字符串s){
this.nodeString=s;
}
公共地图展平(字符串前缀){
Map Map=newhashmap();
map.put(前缀、节点限制);
返回图;
}
}
字典节点:
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;
}
}
公共类DictNode扩展HashMap实现节点{
公共地图展平(字符串前缀){
Map Map=newhashmap();
如果(prefix.length()>0)prefix=prefix+“”;
for(字符串键:keySet()){
map.putAll(get(key).flatten(prefix+key));
}
返回图;
}
}
现在,您只需要在节点上调用flatte方法
使用空字符串参数值,您将返回扁平化字典。如果我错了,请纠正我。您必须将每个:{替换为{,并且所有连续的}都必须替换为单个}。@Dante这个想法是为了在一般情况下工作。例如,这不适用于{a:{b:c,d:e}
因为在这种情况下,你应该有{a_b:c,a_d:e}
。他给出的例子不具有代表性。