我的博客地址: https://erzbir.com/posts/76a4a905.html
题目:
给你一个字符串 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”.
提示:
1 <= s.length <= 104
s 仅有英文字母和空格 ’ ’ 组成
s 中至少存在一个单词
思路:
首先, 题目说返回最后一个单词的长度, 这个时候我们应该想到直接从字符串末尾开始向前遍历即可.
由于单词是以空格分隔开, 只需要当遍历到最后一个单词前面的空格时就可以返回长度.
通过观察示例我们发现, 这个字符串并不是只有单词之间才会有空格, 前后都会有无关的空格. 由于我们从尾部开始找, 就可以不用管前面的空格, 可以从最后一个开始如果是空格就让下标往前移动直到不是空格位置, 这样就忽略掉了末尾的空格.
代码实现:
C语言代码:
int lengthOfLastWord(char * s){
int index = 0;
int length = 0;
while (s[index] != '\0') {
index++; // 统计字符串的长度
}
while (s[index - 1] == ' ') {
index--; // 去掉末尾的空格
}
while (index - 1 >= 0 && s[index - 1] != ' ') {
length++;
index--; // 这一个循环统计长度
}
return length;
}
执行效率仅供参考: