给定一个仅包含大小写字母和空格 ' ' 的字符串,返回其最后一个单词的长度。
如果不存在最后一个单词,请返回 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 1
即使遍历,为什么不从后往前遍历?
|
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 2
if (s.length() == 0 || s == null)
…… |
19
MSilen 2018-09-02 12:43:41 +08:00 via Android 1
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 一道题。这是之前的内容: https://www.v2ex.com/t/485438#reply7
|