【发布时间】:2014-01-16 21:07:16
【问题描述】:
最近遇到一个面试问题。我被要求为表达式评估编写代码。表达式格式如下:
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
输入:
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-nary 树来表示表达式。例如,表达式: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 树可以表示为二叉树。因此,所有追加或搜索操作将是二叉树的插入或搜索操作。似乎这种方法有效。但我想知道是否有更好的方法来解决这个问题?
【问题讨论】:
标签: algorithm data-structures tree