力扣58. 最后一个单词的长度

90 阅读3分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第18天,点击查看活动详情

力扣58. 最后一个单词的长度

一、题目描述:

给你一个字符串 s,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。

单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。

示例 1:

输入:s = "Hello World"

输出:5

解释:最后一个单词是“World”,长度为5。

示例 2:

输入:s = " fly me to the moon "

输出:4

解释:最后一个单词是“moon”,长度为4。

示例 3:

输入:s = "luffy is still joyboy"

输出:6

解释:最后一个单词是长度为6的“joyboy”。

提示:

1 <= s.length <= 104

s 仅有英文字母和空格 ' ' 组成

s 中至少存在一个单词

来源:力扣(LeetCode)

链接:leetcode.cn/problems/le…

著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

二、思路分析:

  1. 这道题考察了什么思想?你的思路是什么?

    我的思路很简单,遍历字符串,当出现不为空的字符时开始记录,一直到出现空格停止记录,然后放入切片中。如此直到字符串遍历完毕,然后再取切片中最后一个字符串即可。

    比如:"luffy is still joyboy"

    开始遍历字符串,记录l直到出现第一个空格停止,此时已经记录了luffy,放入切片中,然后开始下一个isstilljoyboy。然后取切片最后一个joyboy即可。

    func lengthOfLastWord(s string) int {
        arr := make([]string,0)
        str := make([]string,0)
        for _,s := range s{
            
            if s != ' '{
                str = append(str,string(s))
            }
            fmt.Println(str)
            if s == ' '{  
                str = make([]string,0)
            }  
            str1 := strings.Join(str,"")
            fmt.Println(str1)
            arr = append(arr,str1)
        }
        r := 0
        fmt.Println(arr)
        for i:=len(arr)-1;i>=0;i--{
            if len(arr[i]) > 0{
                r =  len(arr[i])
                break
            }
        }
        return r
    }
    

image.png

  1. 哈哈哈哈,执行用时超过0.00%的用户。

  2. 做题的时候是不是一次通过的,遇到了什么问题,需要注意什么细节?

    其实,我们只需要反向遍历字符串,寻找最后一个单词然后计算其长度即可。

    因为字符串至少存在一个单词,因此反向遍历的第一个字母即单词的最后一个字母,我们只需要计算长度即可,到后面的第一个空格停止计数即可。

  3. 有几种解法,哪种解法时间复杂度最低,哪种解法空间复杂度最低,最优解法是什么?其他人的题解是什么,谁的效率更好一些?用不同语言实现的话,哪个语言速度最快?

    用s.trim()去掉字符串的前后空格,从第一个单词开始计数,若中间遇到空格,计数器重置为0。

    ​
    class Solution {
        public int lengthOfLastWord(String s) {
            String s1 = s.trim();
            char[] ch=s1.toCharArray();
            int t=0;
            for (int i = 0; i < ch.length; i++) {
                if (ch[i]!=' '){
                    t++;
                }else {
                    t=0;
                }
            }
            return t;
        }
    }
    ​
    作者:chao-bo-jie
    链接:https://leetcode.cn/problems/length-of-last-word/solution/yong-strimqu-diao-zi-fu-chuan-de-qian-ho-vp4e/
    来源:力扣(LeetCode)
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
    

三、AC 代码:

func lengthOfLastWord(s string) (ans int) {
    index := len(s) - 1
    for s[index] == ' ' {
        index--
    }
    for index >= 0 && s[index] != ' ' {
        ans++
        index--
    }
    return
}
​

四、总结:

反向遍历即可,我把它搞复杂了,结果导致时间复杂度太高了!

模板来源:

作者:掘金酱

链接:juejin.cn/post/706970…

来源:稀土掘金

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。