用 JavaScript 檢查方程的有效性
問題
我們需要編寫一個 JavaScript 函式,以陣列 arr 作為第一個也是唯一的引數。
陣列 arr 包含以下兩種形式之一的字串方程式 −
‘X ===Y’
X!==Y’
此處,X 和 Y 可以是任何變數。
我們的函式應該檢查陣列中的所有方程,我們是否可以分配一些數字,以使陣列中的所有方程返回 true。
例如,如果對函式的輸入是 −
const arr = ['X===Y', 'Y!==Z', 'X===Z'];
那麼輸出應該是 −
const output = false;
輸出說明
無論我們為 X、Y 和 Z 賦什麼值。這三個方程式永遠無法滿足。
示例
程式碼如下 −
const arr = ['X===Y', 'Y!==Z', 'X===Z'];
const validateEquations = (arr = []) => {
const map = {};
const len = {};
const inValids = [];
const find = (item) => {
while(map[item] && item !== map[item]){
map[item] = map[map[item]];
item = map[item];
};
return item;
};
const add = (a, b) => {
const first = find(a);
const second = find(b);
if(first === second){
return;
};
if(len[first] < len[second]){
map[first] = second;
len[second] += len[first];
}else{
map[second] = first;
len[first] += len[second];
}
}
arr.forEach((item) => {
const X = item[0];
const Y = item[4];
map[X] = map[X] || X;
map[Y] = map[Y] || Y;
len[X] = len[X] || 1;
len[Y] = len[Y] || 1;
if(item[1] === '!'){
inValids.push([X, Y]);
}else{
add(X, Y);
};
});
return inValids.every(([a, b]) => find(a) !== find(b))
};
console.log(validateEquations(arr));輸出
並且在控制檯中的輸出將是 −
false
廣告
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP