likes
comments
collection
share

给你一串字符串,如何找出最长的单词

作者站长头像
站长
· 阅读数 10

前言

这回给大家介绍一道算法题,这是我在面试过程中问到的。不过当时面试官只需要我简述一下思路过程即可。我思考了片刻,便简单阐述了一下我的思路。本来我是不打算拿这题出来讲的,但是在我整理面试题的时候发现这道题竟然惊奇地出现过两次,因此还是决定讲一讲这道算法题了。

题目内容

题目大致是这样的,给你一串句子或者字符串,找出里面长度最长的单词。下面举个小例子:

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;
}

现在来拆解一下这段代码,首先把这一串字符串进行分割,然后开始遍历分割出来的单词,如果碰到长度更长的单词,就用变量将这个单词存储起来,就这样依次遍历到最后,就可以找到长度最长的单词了。

这个算法主要考察我们对字符串方法的了解程度,整体而言并不难。

总结

以上就是我从遇到到解决这道算法题的整个过程,虽然题目比较简单,但是还是能学到很多东西的,就比如字符串方法的应用等。往往有的时候我会因为说出了解题思路,而忽视了如何用代码去解决它,这一点还是非常重要的,它体现的是你的代码能力。总之,基础知识不容忽视,代码得多写多练才行~