题目描述:
给你一个字符串 s
,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。
单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。
示例 1:
输入:s = "Hello World" 输出:5 解释:最后一个单词是“World”,长度为 5。
示例 2:
输入:s = " fly me to the moon " 输出:4 解释:最后一个单词是“moon”,长度为 4。
示例 3:
输入:s = "luffy is still joyboy" 输出:6 解释:最后一个单词是长度为 6 的“joyboy”。
暴力解法&思路:
- 题目要求返回字符串中最后一个单词的长度,我们可以反向遍历字符串,即只需要返回反向字符串的第一个单词长度即可;
- 有了这个思路,我们需要考虑到头处理及边界处理,首先需要找到单词最后一个字母的下标,然后开始遍历,直到遇到' '或者字符串开头位置(字符串不包含‘ ’),指针走的长度即最后一个单词的长度,开搞
代码实现(C):
int lengthOfLastWord(char* s) {int index = strlen(s) - 1;while (s[index] == ' ') { // 找到单词的末尾index--;}int mlen = 0;while (s[index] != ' ' && index >= 0) { // 遍历直至遇到' '或字符串开头mlen++;index--;}return mlen;
}
时间复杂度:O(n),n是字符串的长度,最多我们只需反向遍历字符串至开头位置
空间复杂多:O(1)
代码实现(java):
public static int lengthOfLastWord(String s) {int index = s.length() - 1;while (s.charAt(index) == ' ') {index--;}int mlen = 0;while (index >= 0 && s.charAt(index) != ' ') {mlen++;index--;}return mlen;
}
优解(直接使用JAVA API接口):
- 这里简单介绍下两个常用JAVA 字符串的处理接口,我们先应用于题解
1、trim()
public static int lengthOfLastWord(String s) {String str = s.trim(); // 去除字符串前后空格return str.length() - str.lastIndexOf(' ') - 1;}
-
Java中的trim()方法用于移除字符串两端的空白
-
空白字符不仅仅是空格,还包括制表符/t、换行符/n以及其他Unicode空白字符
-
trim()方法只能移除开头和结尾的空白字符,中间的空白字符不会被影响
2、split()
public static int lengthOfLastWord(String s) {String[] str = s.split(" "); // 按照空格切分成不同字符串,存入str中return str[str.length -1].length();
}
- 用于根据给定的正则表达式将字符串分割成字符串数组
- split()方法也有两个常用的重载形式
- String[] split(String regex):按照给定的正则表达式分割字符串,返回一个字符串数组
- String[] split(String regex, int limit):按照给定的正则表达式分割字符串,并且限制分割次数