LeetCode 58最后一个单词长度
题目描述
给定一个仅包含大小写字母和空格 ’ ’ 的字符串 s,返回其最后一个单词的长度。如果字符串从左向右滚动显示,那么最后一个单词就是最后出现的单词。
如果不存在最后一个单词,请返回 0 。
说明:一个单词是指仅由字母组成、不包含任何空格字符的 最大子字符串。
示例
输入: “Hello World”
输出: 5
题目解析
按照题目的意思,反正就是找到最后一个有字母的单词的长度(当然拼写正不正确不是我们管的)。那么从后往前开始遍历,统计字符的个数,遇到空格的时候返回统计的长度即可。但是题目给的字符串可能在最后面会给出多个空格,例如:“hello world ”。此时只需将首尾的空格去掉即可。去掉方法有以下两种:
- 使用java字符串中的trim方法去掉首尾空格
- 不用显示去掉,直接在统计的时候跳过最后面的空格,遇到第一个不是空格的字符时开始计算。
下面是两种实现方式:
-
对于java,C++,python等这类语言的话,都有对于字符串的切片操作,即split。下面就是直接使用split函数,将输入的字符串根据空格切分成字符串数组,返回该数组最后一个字符串的长度即可。
public int lengthOfLastWord(String s) { String[] split = s.split(" "); if (split.length == 0) { //s都是空格的话切分之后的数组为空 return 0; } return split[split.length - 1].length(); }
程序执行结果:
-
上面那种使用split的方法虽然简单直接,但是并没有那么快,直接从后面往前面统计的方法就要快很多,代码如下:
public int lengthOfLastWord(String s) { int count = 0; //s = s.trim(); //提前将首尾的空格去除掉 for (int i = s.length() - 1; i >= 0; i--) { if (s.charAt(i) == ' ' && count == 0) { //直接跳过末尾的空格,没有用trim方法的话可以这么实现 continue; } if (s.charAt(i) == ' ') { //跳过最末尾的所有空格后如果之后还出现空格则证明最后一个单词的长度已经统计完毕 break; } count++; } return count; }