最后一个单词的长度
今天的题目是力扣面试经典150题中的数组的简单题: 最后一个单词的长度
题目描述
给定一个仅包含大小写字母和空格 ’ ’ 的字符串 s,请返回其最后一个单词的长度。如果字符串 s 中不存在最后一个单词,请返回 0。
- 说明:
一个单词是指由字母组成的,不包含任何空格的连续子串。 - 示例:
- 输入:
“Hello World” - 输出:
5 - 解释:
字符串中的最后一个单词是 “World”,它的长度是 5。 - 输入:
"a " - 输出:
1 - 解释:
最后一个单词是 “a”,长度为 1。
- 输入:
题目分析
题目需求是获取字符串中最后一个单词的长度,那么我们需要对字符串的组成有充分了解。
根据题目中的设定,字符串是有单词与空格组合在一起形成,并且这个单词还是连续的字母组成,中间不会有空格存在。
这个题目很自然的就想到了直接用空格分割数组取最后一个非空元素的长度即可。
答案过于简单,于是想想还有没有其他方法。
由于字符串是空格隔开,单词都是连续的字母,那么我们倒序遍历字符数组,跳过第一个可能遇到的空格(字符串以空格结尾,符合题目中字符串的要求),从第一个字母字符开始进行计数,遇到下一个空格停止,得到到数就是最后一个字母的长度。
解题思路
直接分割:
使用字符串的 split 方法分割字符串,得到所有单词。
返回最后一个单词的长度。从右向左遍历:
从字符串的末尾开始向前遍历,直到遇到第一个非空格字符。
继续向前遍历,直到遇到第一个空格字符。
计算两个位置之间的距离,即为最后一个单词的长度。
实际算法代码
根据以上分析,我们可以写出以下代码:
public class LengthOfLastWord {
public static void main(String[] args) {
LengthOfLastWord solution = new LengthOfLastWord();
// 示例数据
String input = "Hello World";
// 调用计算最后一个单词长度的方法
int length = solution.lengthOfLastWord2(input);
// 输出结果
System.out.println("The length of the last word is: " + length);
}
/**
* 计算最后一个单词的长度(倒序计数法)
*
* @param s 输入的字符串
* @return 最后一个单词的长度
*/
public int lengthOfLastWord2(String s) {
int length = 0;
int tail = s.length() - 1;
// 移除末尾的空格
while (tail >= 0 && s.charAt(tail) == ' ') {
tail--;
}
// 计算最后一个单词的长度
while (tail >= 0 && s.charAt(tail) != ' ') {
length++;
tail--;
}
return length;
}
/**
* 计算最后一个单词的长度(分隔法)
*
* @param s 输入的字符串
* @return 最后一个单词的长度
*/
public int lengthOfLastWord1(String s) {
String[] split = s.split(" ");
return split[split.length-1].length();
}
}
结果
上述代码中,我们分别编写了字符串分割法以及倒序计数法,两种方法都可行,并且都正常通过测试。
提交到力扣也没有问题:
不过提交到力扣以后,倒序计数法的评分要比分割法好一点,分割法胜在直接简便。
总结
今天的题目依旧比较简单,毕竟是简单题目,再过几天就上中等难度题目了。
加油!!!