LeetCode题练习与总结:最后一个单词的长度--58

187 篇文章 0 订阅
51 篇文章 0 订阅

一、题目描述

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

二、解题思路

  1. 首先,我们需要遍历字符串 s,跳过所有开头的空格字符。
  2. 接下来,我们需要找到最后一个单词的开始位置。我们可以通过找到第一个非空格字符来实现。
  3. 一旦找到最后一个单词的开始位置,我们需要继续遍历字符串,直到遇到下一个空格字符或字符串的末尾。
  4. 计数从最后一个单词的开始位置到空格或字符串末尾之间的字符数量,这将是最后一个单词的长度。

三、具体代码

public class Solution {
    public int lengthOfLastWord(String s) {
        int length = s.length(); // 获取字符串的长度
        int count = 0; // 初始化单词长度计数器
        int lastWordStart = -1; // 初始化最后一个单词的起始位置

        // 遍历字符串
        for (int i = 0; i < length; i++) {
            // 如果当前字符不是空格,并且上一个字符是空格,说明找到了单词的开始
            if (s.charAt(i) != ' ' && lastWordStart == -1) {
                lastWordStart = i;
            }
            // 如果当前字符是空格,并且上一个字符不是空格,说明单词已经结束
            if (s.charAt(i) == ' ' && lastWordStart != -1) {
                count = i - lastWordStart;
                lastWordStart = -1; // 重置起始位置
            }
        }
        // 如果字符串末尾是单词,没有被空格终止,需要特别处理
        if (lastWordStart != -1) {
            count = length - lastWordStart;
        }
        return count; // 返回最后一个单词的长度
    }
}

四、时间复杂度和空间复杂度

1. 时间复杂度
  • 时间复杂度是算法执行时间与输入数据量之间的关系。在这个例子中,我们使用了一个单层循环来遍历整个字符串 s,循环的次数等于字符串的长度 n(即 O(n))。
  • 在循环中,我们执行的操作(如 charAt 和赋值操作)都是常数时间操作,即 O(1)
  • 因此,总的时间复杂度是 O(n),其中 n 是输入字符串的长度。
2. 空间复杂度
  • 空间复杂度是算法使用的存储空间与输入数据量之间的关系。在这个例子中,我们使用了三个额外的变量:lengthcountlastWordStart
  • 这三个变量的空间需求不依赖于输入字符串的大小,它们都是固定大小的变量。
  • 因此,空间复杂度是 O(1),即不随输入字符串的大小而变化。

五、总结知识点

  1. 字符串遍历:通过使用 for 循环和 charAt 方法来遍历字符串中的每个字符。

  2. 条件判断:使用 if 语句来进行条件判断,根据不同的条件执行不同的代码块。

  3. 变量初始化:初始化变量 countlastWordStart 用于记录单词的长度和最后一个单词的起始位置。

  4. 逻辑运算:在条件判断中使用了逻辑与 && 来确保两个条件都满足时才执行代码块。

  5. 处理特殊情况:代码中特别处理了字符串末尾是单词且没有被空格终止的情况。

  6. 字符串长度获取:使用 length 方法获取字符串的长度。

  7. 计数器:使用 count 变量来计数最后一个单词的长度。

  8. 重置变量:在遇到空格时,通过将 lastWordStart 设置为 -1 来重置最后一个单词的起始位置。

  9. 返回值:方法的返回值是最后一个单词的长度。

  10. 边界条件处理:代码考虑了字符串可能以空格结尾的情况,以及可能没有空格只有单词的情况。

以上就是解决这个问题的详细步骤,希望能够为各位提供启发和帮助。

  • 14
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一直学习永不止步

谢谢您的鼓励,我会再接再厉的!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值