用JavaScript构成最长的单词

问题

我们需要编写一个JavaScript函数,该函数将随机的英语字母字符串str作为第一个参数,并将字符串数组arr作为第二个参数。

我们函数的任务是尝试从字符串str中删除一些字符,并检查数组arr中也可以形成哪个最长的单词。我们的函数应该返回最长的字符串。

如果不存在这样的字符串,我们应该返回一个空字符串。

例如,如果函数的输入为-

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

那么输出应该是-

const output = 'gfdfg';

输出说明:

虽然可以通过删除字符串中的字符来形成数组的第一和第二个元素,但是'gfdfg'是最长的字符串(5),可以从字符串str中形成。

示例

为此的代码将是-

const str = 'sdgfdfghdjh';
const arr = ['sdf', 'fghj', 'gfdfg', 'absc', 'a', 'hasl'];
const findLongestWord = (str = '', arr = []) => {
   arr.sort((a, b) => {
      if (a.length !== b.length) {
         returnb.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