最近我遇到一個面試問題。我被要求編寫表達式評估代碼。表達式格式如下所示:如何解析某種類型的配置文件
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代表地圖A中的元素B,並且A.B的值是BDE;同樣,A.D.C.A的價值是redhat。表示字符串被稱爲「路徑表達式」。
該配置還支持追加和覆蓋操作。對於上面的例子,我們使用+ =操作來附加或覆蓋地圖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
輸入:
A = {A = 1; B = 2; C = 3; E = {A = 100;};} ; A = {D = 4; E = {B = 10; C = D;};};};
AEB
BDE
輸出
AEB = 10
BDE = N/A
我的想法
我想使用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-tree樹可以表示爲二叉樹。因此,所有附加或搜索操作都將是二叉樹的插入或搜索操作。看來這種方法是有效的。但我想知道是否有更好的方法來解決這個問題?
謝謝你的評論。我認爲這種方法是行不通的,因爲即使你把所有的孩子都放在散列圖中,你仍然很難找到對應的鍵值。例如,A = {A = {A = B};};在這種情況下,如果我們想要找到A [A] [A]的價值呢? –
假設第一個節點被聲明爲節點,您將執行node.children.get('A')。children.get('A').val – Meow