在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 次浏览

启动您的 职业生涯

通过完成课程获得认证

开始
广告
© . All rights reserved.