自学内容网 自学内容网

leetcode58:最后一个单词的长度

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

步骤1:定义问题性质

输入输出条件

  • 输入:一个字符串 s,由若干单词组成,单词之间用空格隔开。字符串的长度在 110^4 之间。
  • 输出:最后一个单词的长度,返回一个整数。

限制

  • 字符串 s 只包含英文字母和空格。
  • 字符串中至少存在一个单词。

边界条件

  • 字符串可能包含前后空格。
  • 字符串的长度可能达到最大值(10^4),需考虑性能。

步骤2:问题分解

将问题分解为以下几个步骤:

  1. 去除字符串两端的空格:使用内置的字符串函数来确保没有多余的空格干扰。
  2. 从后向前遍历字符串:找到最后一个单词的起始位置和结束位置。
  3. 计算最后一个单词的长度:从找到的起始位置和结束位置进行长度计算。

解决方案逻辑

  1. 去除两端空格:可使用 std::string::erasestd::find_if 或者直接使用 C++11 及以上的 std::string::trim 方法(若有)。
  2. 从后向前遍历:使用循环,从最后一个字符向前查找,直到遇到空格。
  3. 长度计算:通过找到的起始和结束位置计算长度。

算法设计

  • 时间复杂度:O(n),因为我们需要遍历字符串一遍。
  • 空间复杂度:O(1),只使用了固定数量的额外空间。

这种方法是最有效的,因为我们只需对字符串进行一次遍历,且不需要额外的存储结构。

步骤3:C++代码实现

第二种做法,直接统计最后一个单词的单词数量.

步骤4:算法启发

通过解决这个问题,我们可以得到以下启发:

  • 字符串处理技巧:掌握如何去除空格和遍历字符串,对于其他字符串处理问题同样适用。
  • 效率提升:在处理大规模数据时,理解时间和空间复杂度的概念可以帮助我们选择最佳算法。
  • 边界条件处理:学习如何处理字符串边界情况对于编写鲁棒代码至关重要。

步骤5:实际应用分析

应用示例

在自然语言处理(NLP)领域,确定文本中最后一个单词的长度可以用于多种用途:

  • 文本分析:在分析用户输入时,了解最后一个单词的长度可以帮助推测用户的意图。
  • 搜索引擎优化:在处理用户查询时,搜索引擎可以使用此算法来优化用户体验,根据输入的最后一个单词调整搜索结果。

具体实现

例如,考虑一个聊天机器人应用,机器人需要根据用户输入的最后一个单词生成响应。利用上述算法,机器人可以快速获取用户最新意图并给出合适的回复。通过提高响应速度和准确度,可以显著提升用户体验。


原文地址:https://blog.csdn.net/D2510466299/article/details/142733019

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!