Java算法题-解析 "最后一个单词的长度" 算法问题
题目:
给定一个字符串 s
,由若干单词组成,单词之间用空格分隔。返回字符串中最后一个单词的长度。如果不存在最后一个单词,请返回 0。
引言:
"最后一个单词的长度" 是一个关于字符串处理的简单问题。解决这个问题需要对字符串的处理和逻辑判断有基本的理解,同时需要找到一种方法来找到字符串中最后一个单词并计算其长度。通过解答这个问题,我们可以提升对字符串处理和边界条件的考虑,同时也能拓展对简单字符串问题的解决方案。
算法思路:
我们可以从字符串的末尾开始向前遍历,跳过末尾的空格,然后计算最后一个单词的长度。具体思路如下:
- 从字符串的末尾开始向前遍历,初始化一个变量
length
表示最后一个单词的长度。 - 跳过末尾的空格,找到最后一个单词的起始位置。
- 继续向前遍历,直到遇到空格或者到达字符串的开头,同时更新
length
计数。 - 返回计算得到的
length
。
代码实现:
以下是使用 Java 实现的 "最后一个单词的长度" 算法的示例代码:
public class LengthOfLastWord {
public int lengthOfLastWord(String s) {
int length = 0;
int i = s.length() - 1;
// Skip trailing spaces
while (i >= 0 && s.charAt(i) == ' ') {
i--;
}
// Count the length of the last word
while (i >= 0 && s.charAt(i) != ' ') {
length++;
i--;
}
return length;
}
}
算法分析:
- 时间复杂度:从字符串的末尾向前遍历,时间复杂度为 O(n),其中 n 是字符串的长度。
- 空间复杂度:只需要常数级的额外空间。
示例和测试:
假设给定字符串 s = "Hello World"
,根据算法,最后一个单词是 "World",长度为 5。
我们可以使用以下代码进行测试:
public class Main {
public static void main(String[] args) {
LengthOfLastWord solution = new LengthOfLastWord();
String s = "Hello World";
int length = solution.lengthOfLastWord(s);
System.out.println("Length of last word: " + length);
}
}
总结:
"最后一个单词的长度" 算法题要求找到字符串中最后一个单词并计算其长度,是一个简单的字符串处理问题。通过实现这个算法,我们可以提升对字符串处理和边界条件的考虑,同时也能拓展对简单字符串问题的解决方案。这个问题强调了如何从字符串末尾向前遍历,跳过空格并计算最后一个单词的长度。