Bootstrap

力扣第58题:最后一个单词的长度

力扣第58题是 最后一个单词的长度,具体要求是给定一个字符串,找到其最后一个单词的长度。


题目描述

输入:一个由字母和空格组成的字符串 s,可以包含大小写字母和若干空格。

输出:最后一个单词的长度。

注意

  1. 单词由字母组成,且与空格分隔。
  2. 字符串可能包含尾部空格。

解决思路

我们可以从后往前遍历字符串,跳过末尾的空格,然后统计最后一个单词的长度。以下是具体步骤:

  1. 跳过末尾空格:从字符串尾部开始,找到第一个非空格字符。
  2. 统计单词长度:继续向前遍历,直到遇到空格或到达字符串开头。
  3. 返回长度

C语言代码实现

#include <stdio.h>
#include <string.h>

int lengthOfLastWord(char* s) {
    int length = 0;
    int i = strlen(s) - 1;

    // Step 1: Skip trailing spaces
    while (i >= 0 && s[i] == ' ') {
        i--;
    }

    // Step 2: Count the length of the last word
    while (i >= 0 && s[i] != ' ') {
        length++;
        i--;
    }

    return length;
}

int main() {
    char s[] = "Hello World   ";
    int result = lengthOfLastWord(s);
    printf("The length of the last word is: %d\n", result);
    return 0;
}

输入与输出

输入

s = "Hello World   "

输出

The length of the last word is: 5

代码解析

  1. 输入字符串处理
    • 使用 strlen 获取字符串长度。
    • 从字符串尾部开始跳过空格(避免尾部空格影响结果)。
  2. 统计最后一个单词的长度
    • 遍历非空格字符,同时累加长度,直到遇到空格或到达字符串开头。
  3. 返回结果:返回累积的长度。

复杂度分析

  • 时间复杂度:O(n),其中 n 是字符串的长度。我们最多遍历字符串一次。
  • 空间复杂度:O(1),仅使用了常量级额外空间。
;