怒刷力扣(最后一个单词的长度)

简介: 查找最后一个单词长度的大小,这个题的关键点就是处理最后几个字符是空字符串的情况,但是也不是很难,最简单的一道题了吧。

最后一个单词的长度

WangScaler: 一个用心创作的作者。

声明:才疏学浅,如有错误,恳请指正。

题目

给你一个字符串 s,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。

单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。

分析

既然是最后一个单词的长度,那么只需要从后往前遍历,当遇到空格或者遍历完毕时停止,遍历的长度就是我们最后一个单词的长度。

那么其次就要考虑考虑一些特殊情况了。

  • 第一种就是空字符串,这种好像对我们没有什么影响。
  • 第二种就是最后几个字符是空字符串。这个是很容易疏忽的一点。

起初我就是天真的以为最后一位不会出现空格。开始的代码这样写的

public static int lengthOfLastWord(String s) {
    int count = 0;
    for (int i = s.length() - 1; i >= 0; i--) {
        if (' ' == s.charAt(i)) {
            return count;
        }
        count++;
​
    }
    return s.trim().length();
}

image.png

提交之后,一直解答失败,一直纳闷a怎么计算出来的长度是2呢?后来才注意到a后边还有一个空格。啧啧,没对后边的空格进行处理。

答案

针对第二种情况的处理办法,我这里是加上一个标记位flag,标记最后的字符是否为空字符串,直到不是空字符串时flag为true,开始计算长度。

public static int lengthOfLastWord(String s) {
    boolean flag = false;
    int count = 0;
    for (int i = s.length() - 1; i >= 0; i--) {
        if (' ' == s.charAt(i)) {
            if (flag)
                return count;
            continue;
        }
        flag = true;
        count++;
​
    }
    return s.trim().length();
}

复杂度

  • 时间复杂度:O(n),最差的情况就是遍历整个字符串。
  • 空间复杂度:O(1),我们只需要几个变量记录我们的数据。

总结

因为我们需要最后一个字符的长度,所以进行反向遍历,自然是最简单最直接的思路,这个题没什么技术含量。最重要的就是处理后边几个空字符串的情况,我们这里采用的是标记法。而官方的示例是先倒叙遍历,如果是空字符串,则继续往下遍历。直到不是空字符串停止,接着就是我最初的思路,遇到空字符串或者遍历结束则计算长度。

都来了,点个赞再走呗!

关注WangScaler,祝你升职、加薪、不提桶!

目录
相关文章
|
1月前
Leetcode(最后一个单词长度)
这篇文章介绍了两种解决LeetCode第58题的方法,即计算给定字符串中最后一个单词的长度,方法包括翻转字符串和逆向遍历统计。
18 0
|
1月前
【LeetCode 20】151.反转字符串里的单词
【LeetCode 20】151.反转字符串里的单词
19 0
|
3月前
|
算法
LeetCode第58题最后一个单词的长度
LeetCode第58题"最后一个单词的长度"的解题方法,通过从字符串末尾向前遍历并计数非空格字符,直接得出最后一个单词的长度。
LeetCode第58题最后一个单词的长度
|
3月前
|
算法 JavaScript Python
【Leetcode刷题Python】79. 单词搜索和剑指 Offer 12. 矩阵中的路径
Leetcode第79题"单词搜索"的Python解决方案,使用回溯算法在给定的二维字符网格中搜索单词,判断单词是否存在于网格中。
41 4
|
3月前
|
Python
【Leetcode刷题Python】生词本单词整理
文章提供了一个Python程序,用于帮助用户整理和排版生词本上的单词,包括去除重复单词、按字典序排序,并按照特定的格式要求进行打印排版。
39 3
|
3月前
|
Python
【Leetcode刷题Python】318. 最大单词长度乘积
本文提供了LeetCode题目318的Python编程解决方案,题目要求在一个字符串数组中找出两个不含有公共字母的单词,且这两个单词的长度乘积最大,如果不存在这样的两个单词,则返回0。
18 0
|
5月前
|
算法
【LeetCode刷题】滑动窗口解决问题:串联所有单词的子串(困难)、最小覆盖子串(困难)
【LeetCode刷题】滑动窗口解决问题:串联所有单词的子串(困难)、最小覆盖子串(困难)
|
5月前
|
存储 SQL 算法
LeetCode题58: 5种算法实现最后一个单词的长度【python】
LeetCode题58: 5种算法实现最后一个单词的长度【python】
|
5月前
|
算法 测试技术 索引
力扣经典150题第三十二题:串联所有单词的子串
力扣经典150题第三十二题:串联所有单词的子串
26 0
|
5月前
|
算法
力扣经典150题第二十一题:反转字符串中的单词
力扣经典150题第二十一题:反转字符串中的单词
55 0