每天一道LeetCode-12(最后一个单词的长度)

99 阅读1分钟

题目描述

给你一个字符串 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;
}