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

2018-09-02 09:27:29 +08:00
 Acceml

题目

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

如果不存在最后一个单词,请返回 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;
    }
}

每日英语

热门阅读


最近在刷题,主要更新后端相关知识

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

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

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

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

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

几点小建议哈:

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

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

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

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

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

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

楼主别刷题了,先补一下基础先
tsui
2018-09-02 13:36:30 +08:00
@MSilen 哈哈哈哈线上丢 NPE,估计答题者没在正经公司写过代码

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/485309

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX