在JavaScript中形成最長的單詞


問題

我們需要編寫一個JavaScript函式,該函式以隨機的英文字母字串str作為第一個引數,以字串陣列arr作為第二個引數。

我們的函式的任務是嘗試從字串str中刪除一些字元,並檢查可以形成的哪些最長的單詞也存在於陣列arr中。我們的函式應該返回最長的可能字串。

如果沒有這樣的字串,我們應該返回一個空字串。

例如,如果函式的輸入為:

const str = 'sdgfdfghdjh';
const arr = ['sdf', 'fghj', 'gfdfg', 'absc', 'a', 'hasl'];

那麼輸出應該為:

const output = 'gfdfg';

輸出解釋

雖然陣列的第一個和第二個元素可以透過從字串中刪除字元來形成,但“gfdfg”是我們可以從字串str中形成的最長字串(5)。

示例

程式碼如下:

 線上演示

const str = 'sdgfdfghdjh';
const arr = ['sdf', 'fghj', 'gfdfg', 'absc', 'a', 'hasl'];
const findLongestWord = (str = '', arr = []) => {
   arr.sort((a, b) => {
      if (a.length !== b.length) {
         return b.length - a.length;
      };
      return a.localeCompare(b);
   });
   for(const word of arr){
      let index = -1;
      for(const char of word){
         index = str.indexOf(char, index + 1);
         if(index < 0){
            break;
         };
      };
      if (index >= 0){
         return word;
      };
   };
   return '';
};
console.log(findLongestWord(str, arr));

程式碼解釋

我們經歷的步驟如下:

  • 首先按長度然後按詞法順序排序陣列arr。

  • 遍歷arr中的每個單詞,如果單詞的每個字元都不在字串str中,那麼我們只需返回。

  • 如果每個單詞都匹配,那麼我們返回該單詞。

由於我們已經對字典進行了排序,我們可以保證第一次匹配就是我們的答案。

輸出

控制檯中的輸出將為:

gfdfg

更新於:2021年3月3日

224 次瀏覽

啟動您的 職業生涯

透過完成課程獲得認證

開始
廣告