[Leetcode] 58. 最后一个单词的长度 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Acceml
V2EX    推广

[Leetcode] 58. 最后一个单词的长度

  •  
  •   Acceml 2018-09-02 09:27:29 +08:00 4404 次点击
    这是一个创建于 2611 天前的主题,其中的信息可能已经有所发展或是发生改变。
    <1>题目

    给定一个仅包含大小写字母和空格 ' ' 的字符串,返回其最后一个单词的长度。

    如果不存在最后一个单词,请返回 0。

    说明:一个单词是指由字母组成,但不包含任何空格的字符串。

    示例:

    输入: "Hello World" 输出: 5 

    题解

    这个题比较水,主要是注意一下前后有空格这种情况。 如下代码用 preLong 记录截止到当前字符最后一个单词的长度.

    class Solution { public int lengthOfLastWord(String s) { if (s.length() == 0 || s == null) return 0; int slOng= 0; int preLOng= 0; // 记录最后一个 word 的长度 for (int i = 0; i < s.length(); i++) { if (s.charAt(i) == ' ' ) { slOng= 0; } else { slong++; preLOng= slong; } } return preLong; } } 

    每日英语

    • identify (v.) 确认
    • identify ... with ... 确认...
    • identity (n.) 身份;统一性
    • classify (v.) 分类
    • recognize (v.) 识别,认出
    • cognition (n.) 认知

    热门阅读


    最近在刷题,主要更新后端相关知识 Leetcode 名企之路

    31 条回复    2018-09-03 09:27:52 +08:00
    nooper
        1
    nooper  
       2018-09-02 09:55:02 +08:00
    len("sfd dsfd".split()[-1])
    liuyl
        2
    liuyl  
       2018-09-02 09:56:50 +08:00   1
    即使遍历,为什么不从后往前遍历?
    xd314697475
        3
    xd314697475  
       2018-09-02 10:03:11 +08:00
    从后往前,速度不是提高了吗?
    20015jjw
        4
    20015jjw  
       2018-09-02 10:13:27 +08:00 via Android   1
    lz 误人子弟还推广自己的号不好吧

    @Livid 这种算推广么
    jedihy
        5
    jedihy  
       2018-09-02 10:16:33 +08:00 via iPhone
    这不是坑爹吗?这样的代码自封名企之路?
    Acceml
        6
    Acceml  
    OP
       2018-09-02 10:20:42 +08:00
    @xd314697475 嗯,是的,从后面向前快一点,时间复杂度没变化。

    @20015jjw 不够快也不算误人子弟吧

    @jedihy 除了楼上说的从后向前,您有什么比较好的思路呢?

    @20015jjw 这个号一方面是我自己总结,一方面是和大家交流。您有什么比较好的解法吗?
    liuguang
        7
    liuguang  
       2018-09-02 10:20:44 +08:00
    哈哈,当然从后往前快了
    Acceml
        8
    Acceml  
    OP
       2018-09-02 10:21:39 +08:00
    @nooper 你这个显然不符合要求的,兄弟。有空格的情况你没处理,而且既然是面试肯定不能用 trim() split()这种方法的啊。
    pipapa
        9
    pipapa  
       2018-09-02 10:40:51 +08:00
    至少要是最优解吧,每天都来推广以下。
    Acceml
        10
    Acceml  
    OP
       2018-09-02 10:43:49 +08:00
    @pipapa 表达只是思考的工具,不一定是思考的结果。我是这么看的,所以评论区有怼我的,我也觉得是正常,大家交流嘛,而且我是弱菜。
    nooper
        11
    nooper  
       2018-09-02 10:59:25 +08:00
    @Acceml 没认真审题
    jedihy
        12
    jedihy  
       2018-09-02 11:10:10 +08:00 via iPhone
    @Acceml 这个题就这么一个考点,你 miss 掉了。
    ihainan
        13
    ihainan  
       2018-09-02 11:27:24 +08:00
    哈哈我不怼楼主,我还挺喜欢楼主这个栏目的,我也在刷 LeetCode,楼主贴的几道题相对比较简单,顺手去 A 一下调剂一下心情。

    几点小建议哈:

    1. 每次贴出自己的 Solution 之前,不妨看看 Discuss 区别人的答案,楼主想跟别人交流目的是好,但万一某道题交流的人少呢,其他更优的 Solution 自己总得看一下吧?

    2. 一次一道题我还是觉得少了…您之前说的,200 道题,国内几乎所有互联网都够应付了,这点换几年前或许还行,但 LeetCode 现在已经将近 900 题了,您最近的几道题基本都是 Easy 或者是 Normal 难度偏低的,我觉得还是不大够。

    3. 一次一个专题或许会更好些?
    fyyz
        14
    fyyz  
       2018-09-02 11:36:24 +08:00
    @Acceml 还特么时间复杂度没变化。

    假设字符串长度为 M,最后一个单词的长度为 N,从前往后遍历,时间复杂度为 O(M),而从后往前遍历,时间复杂度为 O(N)。

    显而易见,字符串长度可以是几个字符,也可以是数 MB 大小,比如说一本原著的 TXT 全文。
    而单词的长度,最多也就 20 个单词了吧?当然也可能有更长的,但是大致都在 20 单词以内。

    因此,从前往后遍历,时间复杂度严重依赖字符串长度,是线性的时间复杂度。
    而从后往前遍历,时间复杂度取决于单词长度,虽然也是线性时间复杂度,但是由于单词长度很短,所以时间复杂度大致可以看成常数时间复杂度。
    ihainan
        15
    ihainan  
       2018-09-02 11:37:14 +08:00
    还有时间复杂度并非没变化呀,O(N)
    ihainan
        16
    ihainan  
       2018-09-02 11:38:07 +08:00
    和 O(W) 是否有差距完全取决于 N (总长度)和 W (最后一个单词长度)的规模。
    fyyz
        17
    fyyz  
       2018-09-02 11:39:41 +08:00
    这水平还是好好回家修炼吧,leetcode 的入门题都做这幅鸟样,还名企呢,丢人。
    ffkjjj
        18
    ffkjjj  
       2018-09-02 12:37:18 +08:00 via iPhone   2
    if (s.length() == 0 || s == null)
    ……
    MSilen
        19
    MSilen  
       2018-09-02 12:43:41 +08:00 via Android   1
    if (s.length() == 0 || s == null)

    楼主别刷题了,先补一下基础先
    tsui
        20
    tsui  
       2018-09-02 13:36:30 +08:00
    @MSilen 哈哈哈哈线上丢 NPE,估计答题者没在正经公司写过代码
    TtiGeR
        21
    TtiGeR  
       2018-09-02 13:56:53 +08:00 via iPhone
    都在吐槽算法 那我就吐槽个单词吧

    像 identify 这种词 光光记为“确认”是很容易混淆用法的

    这个词和 confirm, verify, validate, recognize 在不同情况下的用法要注意异同之处~ 还是建议用英英词典的释义。
    ranleng
        22
    ranleng  
       2018-09-02 14:18:37 +08:00
    ( identify 更像是识别出来出什么东西.
    Acceml
        23
    Acceml  
    OP
       2018-09-02 14:54:52 +08:00
    @fyyz 感谢~~

    @MSilen
    @ffkjjj 确实写得有问题。感谢。

    @fyyz 慢慢会成长的呀,就记录一下题解,丢人也还好。


    @TtiGeR 嗯。记单词确实要放在句子中,不过由于篇幅有限,我这个号也不打算做成英语的号,只是希望不要忘记英语,能通顺的读技术文档。
    Acceml
        24
    Acceml  
    OP
       2018-09-02 15:05:20 +08:00
    感谢大家回复。
    这道题就是因为太简单,所以昨天我就没 A,直接找的网上的 code,没想到那么多问题,为自己不认真检讨下。
    顺便,很喜欢 v 站的氛围,大家都很认真。
    LGA1150
        25
    LGA1150  
       2018-09-02 15:28:49 +08:00
    class Solution {
    public int lengthOfLastWord(String s) {
    int len = 0, tail = s.length() - 1;
    while (tail >= 0 && s.charAt(tail) == ' ') tail--;
    while (tail >= 0 && s.charAt(tail) != ' ') {
    len++;
    tail--;
    }
    return len;
    }
    };

    运行时间 3ms
    回复吞缩进,将就看吧
    LGA1150
        26
    LGA1150  
       2018-09-02 15:29:23 +08:00
    @ffkjjj
    @MSilen
    po 主贴的 Java 代码
    gzlock
        27
    gzlock  
       2018-09-02 16:29:20 +08:00
    @LGA1150 #26 if (s.length() == 0 || s == null) 与 名企之路 这个人设已经崩了,这个号算是臭了。。。
    CheaperCoder
        28
    CheaperCoder  
       2018-09-02 17:09:39 +08:00
    作为一个“名企之路”的号,分享这种代码,不觉得是自己的问题吗?也难怪大家怼你了。
    NickCarter
        29
    NickCarter  
       2018-09-02 17:35:16 +08:00
    ```js

    const lengthOfLastWord = function (s) {
    if(/^ *$/.test(s)) {
    return 0
    }
    return s.match(/ *([A-z]+) *$/)[1].length
    }

    ```
    ayyll
        30
    ayyll  
       2018-09-03 09:04:08 +08:00 via Android
    好多怼楼主
    1.说两句 解题报告这种东西,说白了,写一遍容易让自己思路更清晰,但超级费时间 写一遍的时间够 A 好几道题了 emm
    2.水题适可而止吧。。。如果真打算在算法上有建树的话 高级数据结构,数论,图论,计算几何,以及零零碎碎的 dp 什么的 按专题一路扫过去
    3.如果只是应付一般性的面试的话,当我没说
    Acceml
        31
    Acceml  
    OP
       2018-09-03 09:27:52 +08:00
    @ayyll 点开看了下,你搞 ACM,这块知识确实很厉害。不过我开这个号就是为了强迫总结自己的知识。但是总结的东西不可能每天都发,不发的时候我就 A 一道题。这是之前的内容: t/485438#reply7
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1329 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 37ms UTC 16:48 PVG 00:48 LAX 09:48 JFK 12:48
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86