
给定一个仅包含大小写字母和空格 ' ' 的字符串,返回其最后一个单词的长度。
如果不存在最后一个单词,请返回 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; } } 最近在刷题,主要更新后端相关知识 
1 nooper 2018-09-02 09:55:02 +08:00 len("sfd dsfd".split()[-1]) |
2 liuyl 2018-09-02 09:56:50 +08:00 即使遍历,为什么不从后往前遍历? |
3 xd314697475 2018-09-02 10:03:11 +08:00 从后往前,速度不是提高了吗? |
5 jedihy 2018-09-02 10:16:33 +08:00 via iPhone 这不是坑爹吗?这样的代码自封名企之路? |
6 Acceml OP @xd314697475 嗯,是的,从后面向前快一点,时间复杂度没变化。 @20015jjw 不够快也不算误人子弟吧 @jedihy 除了楼上说的从后向前,您有什么比较好的思路呢? @20015jjw 这个号一方面是我自己总结,一方面是和大家交流。您有什么比较好的解法吗? |
7 liuguang 2018-09-02 10:20:44 +08:00 哈哈,当然从后往前快了 |
8 Acceml OP @nooper 你这个显然不符合要求的,兄弟。有空格的情况你没处理,而且既然是面试肯定不能用 trim() split()这种方法的啊。 |
9 pipapa 2018-09-02 10:40:51 +08:00 至少要是最优解吧,每天都来推广以下。 |
10 Acceml OP @pipapa 表达只是思考的工具,不一定是思考的结果。我是这么看的,所以评论区有怼我的,我也觉得是正常,大家交流嘛,而且我是弱菜。 |
13 ihainan 2018-09-02 11:27:24 +08:00 哈哈我不怼楼主,我还挺喜欢楼主这个栏目的,我也在刷 LeetCode,楼主贴的几道题相对比较简单,顺手去 A 一下调剂一下心情。 几点小建议哈: 1. 每次贴出自己的 Solution 之前,不妨看看 Discuss 区别人的答案,楼主想跟别人交流目的是好,但万一某道题交流的人少呢,其他更优的 Solution 自己总得看一下吧? 2. 一次一道题我还是觉得少了…您之前说的,200 道题,国内几乎所有互联网都够应付了,这点换几年前或许还行,但 LeetCode 现在已经将近 900 题了,您最近的几道题基本都是 Easy 或者是 Normal 难度偏低的,我觉得还是不大够。 3. 一次一个专题或许会更好些? |
14 fyyz 2018-09-02 11:36:24 +08:00 @Acceml 还特么时间复杂度没变化。 假设字符串长度为 M,最后一个单词的长度为 N,从前往后遍历,时间复杂度为 O(M),而从后往前遍历,时间复杂度为 O(N)。 显而易见,字符串长度可以是几个字符,也可以是数 MB 大小,比如说一本原著的 TXT 全文。 而单词的长度,最多也就 20 个单词了吧?当然也可能有更长的,但是大致都在 20 单词以内。 因此,从前往后遍历,时间复杂度严重依赖字符串长度,是线性的时间复杂度。 而从后往前遍历,时间复杂度取决于单词长度,虽然也是线性时间复杂度,但是由于单词长度很短,所以时间复杂度大致可以看成常数时间复杂度。 |
15 ihainan 2018-09-02 11:37:14 +08:00 还有时间复杂度并非没变化呀,O(N) |
16 ihainan 2018-09-02 11:38:07 +08:00 和 O(W) 是否有差距完全取决于 N (总长度)和 W (最后一个单词长度)的规模。 |
17 fyyz 2018-09-02 11:39:41 +08:00 这水平还是好好回家修炼吧,leetcode 的入门题都做这幅鸟样,还名企呢,丢人。 |
18 ffkjjj 2018-09-02 12:37:18 +08:00 via iPhone if (s.length() == 0 || s == null) …… |
19 MSilen 2018-09-02 12:43:41 +08:00 via Android if (s.length() == 0 || s == null) 楼主别刷题了,先补一下基础先 |
21 TtiGeR 2018-09-02 13:56:53 +08:00 via iPhone 都在吐槽算法 那我就吐槽个单词吧 像 identify 这种词 光光记为“确认”是很容易混淆用法的 这个词和 confirm, verify, validate, recognize 在不同情况下的用法要注意异同之处~ 还是建议用英英词典的释义。 |
22 ranleng 2018-09-02 14:18:37 +08:00 ( identify 更像是识别出来出什么东西. |
23 Acceml OP |
24 Acceml OP 感谢大家回复。 这道题就是因为太简单,所以昨天我就没 A,直接找的网上的 code,没想到那么多问题,为自己不认真检讨下。 顺便,很喜欢 v 站的氛围,大家都很认真。 |
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 回复吞缩进,将就看吧 |
27 gzlock 2018-09-02 16:29:20 +08:00 @LGA1150 #26 if (s.length() == 0 || s == null) 与 名企之路 这个人设已经崩了,这个号算是臭了。。。 |
28 CheaperCoder 2018-09-02 17:09:39 +08:00 作为一个“名企之路”的号,分享这种代码,不觉得是自己的问题吗?也难怪大家怼你了。 |
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 } ``` |
30 ayyll 2018-09-03 09:04:08 +08:00 via Android 好多怼楼主 1.说两句 解题报告这种东西,说白了,写一遍容易让自己思路更清晰,但超级费时间 写一遍的时间够 A 好几道题了 emm 2.水题适可而止吧。。。如果真打算在算法上有建树的话 高级数据结构,数论,图论,计算几何,以及零零碎碎的 dp 什么的 按专题一路扫过去 3.如果只是应付一般性的面试的话,当我没说 |
31 Acceml OP @ayyll 点开看了下,你搞 ACM,这块知识确实很厉害。不过我开这个号就是为了强迫总结自己的知识。但是总结的东西不可能每天都发,不发的时候我就 A 一道题。这是之前的内容: t/485438#reply7 |