找出字符串中最长单词

给定一个字符串,设计一个函数返回该字符串中最长的单词长度

方法一:基础做法,使用split将字符串中的单词以空格分隔到数组中,循环查找最长单词

function findLongestWordLength(str) {
  var words = str.split(' ');
  var maxLength = 0;

  for (var i = 0; i < words.length; i++) {
    if (words[i].length > maxLength) {
      maxLength = words[i].length;
    }
  }

  return maxLength;
}

方法二:split+reduce链式解法(reduce基本使用)。
注意解法中x初始值为传入的0,y初始值为数组第一项

function findLongestWordLength(s) {
  return s.split(' ')
    .reduce(function(x, y) {
      return Math.max(x, y.length)
    }, 0);
}

方法三:spread操作符(...)+split+map解法。
这里先进行str.split("")把字符串分割成数组,调用map返回包含每个单词长度的数组(map(function(item,index,array){}),用于遍历数组,返回处理之后的新数组),用...连接这个数组表示数组各项值,最后调用max取最大值(...arr表数组各项值,[...arr]表数组,所以...arr可以用来对方法进行传值)

function findLongestWordLength(str) {
  return Math.max(...str.split(" ").map(word => word.length));
}

方法四:递归调用。
递归出口是str数组还剩一个元素的时候,这个必然是最长单词。如果数组中第一个长度大于第二个,那么用splice删除第二个(后面的会自动补上空缺),用join将str重新组成字符串(join(separator) 方法用于把数组中的所有元素放入一个字符串。separator是分隔符,默认逗号),递归调用,也就是每次比较第一个和第二个的长度大小。
如果第一个比第二个小,用split提取数组中除第一个以外的元素(slice(start,end) 方法可从已有的数组中返回选定的元素。start开始下标,end结束下标,返回数组不包括结束下标的元素),用join重新组成字符串,递归调用。

function findLongestWordLength(str) {
  //将字符串分割成单个单词
  str = str.split(" ");

  // str仅剩1个元素,它是最长的元素,返回该元素的长度
  //递归出口
  if (str.length == 1) {
    return str[0].length;
  }

  //如果第一个元素的长度大于第二个元素的长度(或相等)
  //删除第二个元素并递归调用该函数
  if (str[0].length >= str[1].length) {
    str.splice(1, 1);
    return findLongestWordLength(str.join(" "));
  }

  //如果第二个元素的长度大于第一个元素的长度
  //调取第一个元素之后的元素
  if (str[0].length <= str[1].length) {
    return findLongestWordLength(str.slice(1, str.length).join(" "));
  }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 第五章******************************************************...
    fastwe阅读 837评论 0 0
  • 概要 64学时 3.5学分 章节安排 电子商务网站概况 HTML5+CSS3 JavaScript Node 电子...
    阿啊阿吖丁阅读 9,983评论 0 3
  • Q1 判断一个单词是否是回文? 回文是指把相同的词汇或句子,在下文中调换位置或颠倒过来,产生首尾回环的情趣,叫做回...
    指尖跳动阅读 5,316评论 0 4
  • 生命的伟大,你感受到了吗? 破壳,蜕变,只有自己内在那个力量才可以完成。 看到壳破开的那一瞬间,我有种恐惧感,害怕...
    莹莹高阅读 145评论 0 0
  • 2018.10.18精进打卡 姓名,朱燕平 常州新日催化剂有限公司 【日精进打卡第74天】 【知~学习】 《六项精...
    ybzyp阅读 173评论 0 0

友情链接更多精彩内容