Leetcode 每日一题 58.最后一个单词的长度
问题描述
给定一个字符串s
,由若干单词组成,单词之间用空格隔开。我们需要返回字符串中最后一个单词的长度。这里的“单词”定义为仅由字母组成、不包含任何空格字符的最大子字符串。
示例
- 输入:
s = "Hello World"
,输出:5
(最后一个单词是“World”,长度为5) - 输入:
s = " fly me to the moon "
,输出:4
(最后一个单词是“moon”,长度为4) - 输入:
s = "luffy is still joyboy"
,输出:6
(最后一个单词是“joyboy”,长度为6)
算法分析
要解决这个问题,我们可以从字符串的末尾开始遍历。我们需要跳过尾部的空格,然后找到最后一个单词的起始位置,并计算它的长度。这个过程需要考虑几个关键点:
- 去除尾部空格:使用
trim()
方法可以去除字符串尾部的空格。 - 识别单词:我们需要识别出单词的起始和结束位置。单词由连续的字母组成,单词之间由空格分隔。
- 计算长度:一旦找到单词的起始位置,我们就可以计算它的长度,直到遇到空格或字符串的开始。
Java实现
下面是一个Java实现的示例:
java
class Solution {
public int lengthOfLastWord(String s) {
// 去除字符串尾部的空格
s = s.trim();
// 如果字符串为空,返回0
if (s.length() == 0) {
return 0;
}
// 从字符串的末尾开始遍历
int length = 0;
boolean isWord = false; // 标记是否处于单词中
for (int i = s.length() - 1; i >= 0; i--) {
// 如果当前字符是字母,并且之前不是在单词中,说明找到了单词的起始位置
if (Character.isLetter(s.charAt(i)) && !isWord) {
isWord = true;
length = 1; // 单词长度至少为1
} else if (Character.isLetter(s.charAt(i)) && isWord) {
// 如果当前字符是字母,并且之前已经在单词中,增加单词长度
length++;
}
// 如果当前字符是空格,并且之前是在单词中,说明已经离开了单词
else if (!Character.isLetter(s.charAt(i)) && isWord) {
break; // 离开循环
}
}
return length;
}
}
总结
这个问题是一个典型的字符串处理问题,它涉及到字符串的遍历和条件判断。通过从字符串的末尾开始遍历,并使用一个布尔变量来标记是否处于单词中,我们可以有效地找到最后一个单词并计算其长度。这种方法简单而高效,适用于处理包含空格和单词的字符串。
原文地址:https://blog.csdn.net/weixin_73687229/article/details/143695454
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!