给你一串字符串,如何找出最长的单词
前言
这回给大家介绍一道算法题,这是我在面试过程中问到的。不过当时面试官只需要我简述一下思路过程即可。我思考了片刻,便简单阐述了一下我的思路。本来我是不打算拿这题出来讲的,但是在我整理面试题的时候发现这道题竟然惊奇地出现过两次,因此还是决定讲一讲这道算法题了。
题目内容
题目大致是这样的,给你一串句子或者字符串,找出里面长度最长的单词。下面举个小例子:
I want to eat a banner.
这里最长的单词是 banner
,而我们需要做的就是如何找出 banner
这个单词。
解题思路
我先说说我当时的思路吧:如何找出句子中最长的单词,我们可以将每个单词单独拎出来进行长度比较,一层循环遍历过后,就可以找出最长的单词。
因为当时只是说思路,所以我也没有在意里面的细节,当时面试官可能也没有注意那么多,看我说出来了就选择问了其他题目。但是当我第二次遇到这道面试题的时候,面试官问我如何取出句子中的每个单词?如何进行遍历?具体使用到的方法是什么?我当时有点不知所措,这些方面确实没考虑过。就拿如何取出句子中的每个单词,我可能都没有立即想出用什么方法。
通过这次我也发现了自己的不足。或许有很多人和我一样,能说出解题的思路,但是不知道如何去实际解决,说白了就是一些基础知识还不够扎实,只会纸上谈兵。这里肯定会用到相关的 JS
原生方法,只不过我对它们的了解还不够熟悉,因此我后面就把 JS
原生方法又重新看了一遍。
上方法,上代码
我们需要熟悉字符串的一些方法,比如这里取出每个单词,就要使用到 split
方法,把字符串按照指定的分割符,拆分成数组中的每一项。这个问题解决了,剩下的就好办了。
split
方法举例如下:
let str = "12+23+34"
let arr = str.split("+") // [12,23,34]
然后开始比较每个单词的长度,给定一个 for
循环,使用 for...of...
方法,这样就可以遍历每个单词。比较完成后就将最后结果 return
出来即可。
最终代码如下所示:
function longestWord(str){
let words = str.split(" ")
let longestWord = ""
for(let word of words){
if(word.length>longestWord.length){
longestWord = word
}
}
return longestWord;
}
现在来拆解一下这段代码,首先把这一串字符串进行分割,然后开始遍历分割出来的单词,如果碰到长度更长的单词,就用变量将这个单词存储起来,就这样依次遍历到最后,就可以找到长度最长的单词了。
这个算法主要考察我们对字符串方法的了解程度,整体而言并不难。
总结
以上就是我从遇到到解决这道算法题的整个过程,虽然题目比较简单,但是还是能学到很多东西的,就比如字符串方法的应用等。往往有的时候我会因为说出了解题思路,而忽视了如何用代码去解决它,这一点还是非常重要的,它体现的是你的代码能力。总之,基础知识不容忽视,代码得多写多练才行~
转载自:https://juejin.cn/post/7280436247730765835