首页 > 其他分享 >LeetCode题练习与总结:最后一个单词的长度--58

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

时间:2024-04-07 19:00:02浏览次数:14  
标签:空格 58 -- 复杂度 单词 长度 字符串 lastWordStart LeetCode

一、题目描述

给你一个字符串 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. 边界条件处理:代码考虑了字符串可能以空格结尾的情况,以及可能没有空格只有单词的情况。

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

标签:空格,58,--,复杂度,单词,长度,字符串,lastWordStart,LeetCode
From: https://blog.csdn.net/weixin_62860386/article/details/137028762

相关文章

  • 个人医疗开支预测项目
     注意:本文引用自专业人工智能社区VenusAI更多AI知识请参考原站([www.aideeplearning.cn])项目背景随着医疗成本的持续上涨,个人医疗开支成为一个重要议题。理解影响医疗费用的多种因素对于医疗保险公司、政府机构以及个人都至关重要。利用数据分析和机器学习技术,我们能够更......
  • 【更新】上市公司-ZF环保补贴、补助数据(2008-2022年)
    01、数据简介环保补贴,又称绿色补贴,是ZF在环保领域实施的一种特定补贴。它主要针对那些在经济主体意识上存在偏差或由于资金私有制而无法有效进行环保投资的企业。环保补贴的目的是解决环保问题,帮助企业改进环保设备和工艺,以减少对环境的损害。环保补助1=绿色补贴*100/营业总......
  • 全国地级市-碳排放绩效原始dofile结果数据(含文献及原始数据)2011-2021年
    地级市-碳排放绩效数据的测算,采用GDP、人类发展指数、CO2排放测算碳排放绩效,基于《中国城市统计年鉴》中的数据,经过线性插值和ARIMA方法填补缺失,跨度2011年至2021年。该数据集详细记录了地级市的总碳排放量,但需注意,2008年以前的常住人口和城市化率数据缺失,1999年以前的总碳排放......
  • 【碳中和】上市公司碳信息披露数据-词频统计(1991-2022年)
    数据来源:上市公司年报时间跨度:1991-2022年数据范围:上市公司数据指标:低碳战略、宣传、方针、理念低碳方针低碳战略低碳宣传低碳理念低排放低碳计划低碳意识降碳计划降碳战略低碳发展零碳战略零碳低碳发展战略零低碳能源碳目标......
  • Python——__init__.py文件
    在Python中,__init__.py文件是一个特殊的文件,常用于将一个普通的文件夹变成一个Python包。这个文件的存在告诉Python解释器,该文件夹应该被视为一个Python包或模块,从而可以导入其中的模块或子包。__init__.py的用途:初始化包:__init__.py文件将一个目录标识为Python包,允许......
  • linux三剑客之流编辑器sed
    sed(streameditor)是Linux和Unix系统中一个非常强大的文本处理工具。它主要用于对文本数据进行过滤和转换。sed可以在不打开文件的情况下,直接对输入流进行操作,并且可以将结果输出到标准输出或文件。基本语法:sed[options]'script'[input[output]]'[options]:sed的命令行......
  • 代码随想录(Day 3)
    今日任务1.移除链表元素2.设计链表3.翻转链表1.移除链表元素LeetCode链接链表经典操作,对于原理不过多解释,主要探讨建立虚拟头结点和不建立虚拟头结点的区别。对于链表操作时,大多数参考书上都给出头结点不需要带数据,这样做是有道理的。因为在链表中,我们涉及到链表的操作......
  • 自搭GPT4.0
    自搭GPT4.0网址https://tsz.bpj666.xyz/调用ChatGPT4.0接口跟官网界面一致无需代理加速器/梯子,只需输入网址,手机/电脑均可只需花1分钟注册网址账号即可使用介绍页面点任意PLUS进来之后的页面可以直接上传文件或者上传图片输入论文就出现了相关的模型爆款文案......
  • 数论
    前言本篇文章主要是给未来的自己看的。由于证明不想直接给导致丧失思考能力,所以没写。还没写完qwq~。知识点余数与质数:质数筛法,欧拉函数,欧几里得(ex),斐蜀定理,BSGS,同余的性质,逆元。组合与矩阵:矩阵乘法,矩阵加速,高斯消元,组合数学,容斥原理............详解质数筛法埃筛:找到质数......
  • redis基本操作
    基本类型string字符串#get/set-获取设置值setkey"value"#设置key的值为valuegetkey#获取key的值#getset-获取设置值getsetdbmongodb#没有旧值,返回nilgetsetdbredis#返回mongodb#setnx-nil时设置(分布式锁......