题目描述
给你一个字符串 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”。
分析
有正序和逆序两个方向遍历。
思路一:对于正向遍历,我们需要用一个current来存储当前单词的长度,如果下一个字符为“ ”,则将当前current设置为0,继续遍历,如果下一个不为“ ”,则将current+1,将最大单词长度设置为current。
实现代码如下:
int lengthOfLastWord(char * s){
int current = 0;
int maxSize = 0;
for(int i = 0; i < strlen(s); i++){
if(s[i] != ' '){
current++;
maxSize = current;
}
else{
current = 0;
}
}
return maxSize;
}
思路二: 对于逆序,我们不需要遍历所有的,只需要将最后一个单词遍历完成,首先如果最后一个单词后,还存在空字符串,需要将指针指向非空字符串的位置,然后再向前遍历,当遍历到空字符串时,或者整个字符串遍历完成,就结束循环。
实现代码如下:
int lengthOfLastWord(char * s){
int maxSize = 0;
int i = strlen(s) - 1;
while(s[i] == ' ') i--;
for(i; i >= 0; i--){
if(s[i] == ' ') return maxSize;
maxSize++;
}
return maxSize;
}