题目:

给定一个字符串s,由若干单词组成,单词之间用空格分隔。返回字符串中最后一个单词的长度。如果不存在最后一个单词,则返回0。

引言:

最后一个单词的长度问题要求返回给定字符串中最后一个单词的长度。这是一个字符串处理问题,本文将使用C语言来解答这个算法问题,并给出C代码实现。我们会详细介绍算法思路,并进行代码实现、算法分析、示例和测试、总结。

算法思路:

为了解决最后一个单词的长度问题,我们可以从字符串末尾开始,逆向遍历,直到找到第一个非空格字符为止,然后从该位置开始计算单词的长度。

具体算法步骤如下:

  1. 从字符串末尾开始逆向遍历,找到第一个非空格字符的位置,记为endPos
  2. endPos开始,继续逆向遍历,直到遇到空格字符或遍历完整个字符串,计算这个单词的长度。
  3. 返回计算得到的单词长度。

代码实现:

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

int lengthOfLastWord(char *s) {
    int len = strlen(s);
    int endPos = len - 1;

    // 找到第一个非空格字符的位置
    while (endPos >= 0 && s[endPos] == ' ') {
        endPos--;
    }

    int wordLength = 0;
    // 从endPos位置开始计算单词长度
    while (endPos >= 0 && s[endPos] != ' ') {
        wordLength++;
        endPos--;
    }

    return wordLength;
}

算法分析:

  1. 时间复杂度:算法的时间复杂度为O(n),其中n是字符串的长度。逆向遍历字符串需要O(n)的时间。
  2. 空间复杂度:算法的空间复杂度为O(1),因为只使用了有限的额外空间来存储变量。

示例和测试:

示例1:

输入: s = "Hello World"
输出: 5

示例2:

输入: s = "   fly me   to   the moon  "
输出: 4

总结:

通过逆向遍历字符串,我们用C语言实现了解决最后一个单词的长度问题的代码。这个算法在时间和空间复杂度上表现良好,适用于一般情况。希望本文能够帮助你理解解决这个算法问题的思路和方法。

标签: 编程算法, 编程算法题, 编程算法大全, 编程算法流程, 算法设计与分析, 数据结构与算法, 算法优化, 算法实现, 常见编程算法, 编程算法入门, 编程算法进阶, 编程算法精通