algorithm - 如何解析某类配置文件

标签 algorithm data-structures tree

最近遇到一道面试题。我被要求编写用于表达式评估的代码。表达式格式如下所示:

   B=10;
   A={
      A=100;
      B=BDE;
      C=C;
      D={
         A=windows;
         B=mac;
      C={
         A=redhat;
         B=ubuntu;
        };
   };
   A+={
       A=200;
       E=1000;
      };

为了表示表达式的键,使用句点分隔的方法。例如A.B表示Map A中的元素B,A.B的值为BDE;同样,A.D.C.A的值是redhat。表示的字符串称为“路径表达式”。

配置还支持附加和覆盖操作。对于上面的例子,我们使用+=操作追加或覆盖了Map A中的值,此时A.A的值为200,A.E的值为1000;

现在,给定一个配置字符串和配置的关键路径,我需要根据配置字符串返回配置值。

规则

1) 键名和他的值只包含字母(A-Z,a-z)和数字(0-9),没有其他字符;

2) 如果找不到值或表达式指向映射,请输出“N/A”

3) 如果找到值,请输出值。输出值时没有空格。

输入输出

输入分为三部分。第一行有两个整数,分别表示配线数(M)和表达式数(N)。

M<=100,N<=100。接下来的 M 行是配置,最后 N 行是表达式。每个配置行包含一个或多个配置。每行长度小于 1000。

输入:

2 2

A={A=1;B=2;C=3;E={A=100;};};

A+={D=4;E={B=10;C=D;};};

A.E.B

B.D.E

输出

A.E.B=10

B.D.E=N/A

我的想法

我正在考虑使用 N 叉树来表示表达式。例如,表达式:A = {A = 1;D = 1;B = {C = 1,D = {D = 1,F = 2};};};可以表示为:

                            (A,-)
                         /    |    \
                      (A,1) (D,1)  (B,-)
                                  /    \
                                (C,1)   (D,-)
                                       /    \
                                     (D,1)  (F,2)

因为N-nary tree可以表示为二叉树。因此,所有附加或搜索操作都将是二叉树的插入或搜索操作。看来这种方法行得通。但我想知道是否有更好的方法来解决这个问题?

最佳答案

我正在考虑将所有 child 放在一个 HashMap 中(因为这是面试官喜欢的)

Node{
    String val;
    HashMap<String, Node> children;
    Node(int val){
        this.val = val;
        children = new HashMap<String, Node>();
    }
}

关于algorithm - 如何解析某类配置文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21172890/

相关文章:

algorithm - 满二叉树的定义

macos - OS X 中的并行 STL 算法

algorithm - 从 n 个桶中选择项目的最小成本

C - 如何更改函数外部的指针?

search - 如何在二叉树中找到给定深度的节点值的总和?

algorithm - 合并排序的重复 - 需要解释

c - 在常规 C 中非法多态属性的方法?

c - 我的树程序在插入一个根节点后崩溃

data-structures - 在树形数据结构中,节点是其自身的兄弟节点吗?

algorithm - 在求解最优二叉搜索树时添加频率总和