导航
导航
文章目录
  1. 题目
  2. 翻译
    1. 方法一:利用lastIndexOf接口
    2. 方法二:利用split接口
    3. 方法三:从后向前遍历字符

LeetCode-58.Length of Last Word

题目

Given a string s consists of upper/lower-case alphabets and empty space characters ‘ ‘, return the length of last word in the string.

If the last word does not exist, return 0.

Note: A word is defined as a character sequence consists of non-space characters only.

For example,
Given s = “Hello World”,
return 5.

翻译

给出一个由大小写字母和空格字符 ‘ ‘ 组成的字符串s,返回其最后一个单词的长度。
如果不存在最后一个单词,返回0。
注意:一个单词的定义是仅由非空格字符组成的字符序列。
例如,给出s = “Hello World”,返回5。

本题唯一的难点是,对“不存在最后一个单词”的理解……应当是s只包含空格的情况。

方法一:利用lastIndexOf接口

先trim,如果长度为0则返回0,否则取得最后一个空格的位置,截取之后的字符串取得长度即可:

1
2
3
4
5
6
public int lengthOfLastWord(String s) {
s = s.trim();
if (s.length() == 0)
return 0;
return s.substring(s.lastIndexOf(" ") + 1).length();
}

方法二:利用split接口

对s用空格split,如果s只包含空格则字符数组长度为0。
s末尾的空格会自动忽略,s中间多个空格会切割为多个长度为0的字符串。
取最后一个字符串即可:

1
2
3
4
5
public int lengthOfLastWord(String s) {
String[] words = s.split(" ");
int len = words.length;
return len == 0 ? 0 : words[len - 1].length();
}

方法三:从后向前遍历字符

从后先前遍历,首先跳过末尾的空格,然后逐步向前计算长度,遇到空格后停止循环返回。

1
2
3
4
5
6
7
8
9
10
11
public int lengthOfLastWord(String s) {
int index = s.length() - 1, res = 0;
while (index >= 0 && s.charAt(index) == ' ')
index--;
while (index >= 0) {
if (s.charAt(index--) == ' ')
break;
res++;
}
return res;
}