58.最后一个单词的长度

  1. 58.最后一个单词的长度
    1. 58.1 题目
    2. 58.2 题解
      1. 分割字符串成字符串数组返回末尾元素
      2. 反向遍历检查空格
    3. 58.3 代码
    4. 58.4 运行结果

58.最后一个单词的长度


58.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”。

提示:

  • 1 <= s.length <= 10^4
  • s 仅由英文字母和空格 ' ' 组成
  • s 中至少存在一个单词

58.2 题解

分割字符串成字符串数组返回末尾元素

// 方法一:分割字符串成字符串数组返回末尾元素
static int LengthOfLastWord1(string s)
{
    // 使用 Split 方法将字符串按空格分割成单词数组
    string[] words = s.Split(' ', StringSplitOptions.RemoveEmptyEntries);

    // 如果单词数组为空,说明字符串中没有单词
    if (words.Length == 0)
    {
        return 0;
    }

    // 返回最后一个单词的长度
    return words[words.Length - 1].Length;
}

反向遍历检查空格

// 方法二:反向遍历检查空格
static int LengthOfLastWord2(string s)
{
    // 初始化变量 endIndex,表示字符串中最后一个非空格字符的索引
    int endIndex = s.Length - 1;

    // 从字符串末尾开始,向前遍历,直到找到第一个非空格字符为止
    while (s[endIndex] == ' ')
    {
        endIndex--;
    }

    // 将 beginIndex 初始化为 endIndex,表示当前找到的最后一个非空格字符的索引
    int beginIndex = endIndex;

    // 继续向前遍历,找到当前单词的第一个字符的索引或者到达字符串的开头
    while (beginIndex >= 0 && s[beginIndex] != ' ')
    {
        beginIndex--;
    }

    // 返回最后一个单词的长度,即 endIndex 减去 beginIndex
    return endIndex - beginIndex;
}

58.3 代码

using System;

class Program
{
    static void Main()
    {
        #region 题目

        // 给你一个字符串 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 中至少存在一个单词

        #endregion

        #region 测试

        // 示例 1
        string str1 = "Hello World";
        int result1_1 = LengthOfLastWord1(str1);
        Console.WriteLine($"示例1 方法1 输出:{result1_1}");
        int result1_2 = LengthOfLastWord2(str1);
        Console.WriteLine($"示例1 方法2 输出:{result1_2}");

        // 示例 2
        string str2 = "   fly me   to   the moon  ";
        int result2_1 = LengthOfLastWord1(str2);
        Console.WriteLine($"示例2 方法1 输出:{result2_1}");
        int result2_2 = LengthOfLastWord2(str2);
        Console.WriteLine($"示例2 方法2 输出:{result2_2}");

        // 示例 3
        string str3 = "luffy is still joyboy";
        int result3_1 = LengthOfLastWord1(str3);
        Console.WriteLine($"示例3 方法1 输出:{result3_1}");
        int result3_2 = LengthOfLastWord2(str3);
        Console.WriteLine($"示例3 方法2 输出:{result3_2}");

        #endregion
    }

    #region 答案

    // 方法一:分割字符串成字符串数组返回末尾元素
    static int LengthOfLastWord1(string s)
    {
        // 使用 Split 方法将字符串按空格分割成单词数组
        string[] words = s.Split(' ', StringSplitOptions.RemoveEmptyEntries);

        // 如果单词数组为空,说明字符串中没有单词
        if (words.Length == 0)
        {
            return 0;
        }

        // 返回最后一个单词的长度
        return words[words.Length - 1].Length;
    }

    // 方法二:反向遍历检查空格
    static int LengthOfLastWord2(string s)
    {
        // 初始化变量 endIndex,表示字符串中最后一个非空格字符的索引
        int endIndex = s.Length - 1;

        // 从字符串末尾开始,向前遍历,直到找到第一个非空格字符为止
        while (s[endIndex] == ' ')
        {
            endIndex--;
        }

        // 将 beginIndex 初始化为 endIndex,表示当前找到的最后一个非空格字符的索引
        int beginIndex = endIndex;

        // 继续向前遍历,找到当前单词的第一个字符的索引或者到达字符串的开头
        while (beginIndex >= 0 && s[beginIndex] != ' ')
        {
            beginIndex--;
        }

        // 返回最后一个单词的长度,即 endIndex 减去 beginIndex
        return endIndex - beginIndex;
    }

    #endregion
}

58.4 运行结果

示例1 方法1 输出:5
示例1 方法2 输出:5
示例2 方法1 输出:4
示例2 方法2 输出:4
示例3 方法1 输出:6
示例3 方法2 输出:6


转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 785293209@qq.com

×

喜欢就点赞,疼爱就打赏