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