用 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

更新於: 09-04-2021

184 次瀏覽

啟動你的 職業生涯

完成課程並獲得認證

立即開始
廣告
© . All rights reserved.