首页 > 编程语言 >力扣面试经典算法150题:最后一个单词的长度

力扣面试经典算法150题:最后一个单词的长度

时间:2024-08-17 18:56:08浏览次数:12  
标签:150 题目 力扣 length 长度 字符串 单词 空格

最后一个单词的长度

今天的题目是力扣面试经典150题中的数组的简单题: 最后一个单词的长度

题目链接:https://leetcode.cn/problems/length-of-last-word/description/?envType=study-plan-v2&envId=top-interview-150

题目描述

给定一个仅包含大小写字母和空格 ’ ’ 的字符串 s,请返回其最后一个单词的长度。如果字符串 s 中不存在最后一个单词,请返回 0。

  • 说明:
    一个单词是指由字母组成的,不包含任何空格的连续子串。
  • 示例:
    • 输入:
      “Hello World”
    • 输出:
      5
    • 解释:
      字符串中的最后一个单词是 “World”,它的长度是 5。
    • 输入:
      "a "
    • 输出:
      1
    • 解释:
      最后一个单词是 “a”,长度为 1。

题目分析

题目需求是获取字符串中最后一个单词的长度,那么我们需要对字符串的组成有充分了解。

根据题目中的设定,字符串是有单词与空格组合在一起形成,并且这个单词还是连续的字母组成,中间不会有空格存在。

这个题目很自然的就想到了直接用空格分割数组取最后一个非空元素的长度即可。

答案过于简单,于是想想还有没有其他方法。

由于字符串是空格隔开,单词都是连续的字母,那么我们倒序遍历字符数组,跳过第一个可能遇到的空格(字符串以空格结尾,符合题目中字符串的要求),从第一个字母字符开始进行计数,遇到下一个空格停止,得到到数就是最后一个字母的长度。

解题思路

  1. 直接分割:
    使用字符串的 split 方法分割字符串,得到所有单词。
    返回最后一个单词的长度。

  2. 从右向左遍历:
    从字符串的末尾开始向前遍历,直到遇到第一个非空格字符。
    继续向前遍历,直到遇到第一个空格字符。
    计算两个位置之间的距离,即为最后一个单词的长度。

实际算法代码

根据以上分析,我们可以写出以下代码:

public class LengthOfLastWord {
   
   public static void main(String[] args) {
        LengthOfLastWord solution = new LengthOfLastWord();

        // 示例数据
        String input = "Hello World";

        // 调用计算最后一个单词长度的方法
        int length = solution.lengthOfLastWord2(input);

        // 输出结果
        System.out.println("The length of the last word is: " + length);
    }

    /**
     * 计算最后一个单词的长度(倒序计数法)
     *
     * @param s 输入的字符串
     * @return 最后一个单词的长度
     */
    public int lengthOfLastWord2(String s) {
        int length = 0;
        int tail = s.length() - 1;

        // 移除末尾的空格
        while (tail >= 0 && s.charAt(tail) == ' ') {
            tail--;
        }

        // 计算最后一个单词的长度
        while (tail >= 0 && s.charAt(tail) != ' ') {
            length++;
            tail--;
        }

        return length;
    }

    /**
     * 计算最后一个单词的长度(分隔法)
     *
     * @param s 输入的字符串
     * @return 最后一个单词的长度
     */
    public int lengthOfLastWord1(String s) {
        String[] split = s.split(" ");
        return split[split.length-1].length();
    }

}

结果

上述代码中,我们分别编写了字符串分割法以及倒序计数法,两种方法都可行,并且都正常通过测试。

在这里插入图片描述

提交到力扣也没有问题:

在这里插入图片描述

不过提交到力扣以后,倒序计数法的评分要比分割法好一点,分割法胜在直接简便。

总结

今天的题目依旧比较简单,毕竟是简单题目,再过几天就上中等难度题目了。

加油!!!

标签:150,题目,力扣,length,长度,字符串,单词,空格
From: https://blog.csdn.net/weixin_48668564/article/details/141152823

相关文章

  • 括号生成-力扣
    classSolution{private:vector<string>result;stringstr;public:voidbacktracking(intn,intl,intr){if(l==n&&r==n){result.push_back(str);return;}if(l<n){......
  • 合并K个升序链表-力扣
    /***Definitionforsingly-linkedlist.*structListNode{*intval;*ListNode*next;*ListNode():val(0),next(nullptr){}*ListNode(intx):val(x),next(nullptr){}*ListNode(intx,ListNode*next):val(x),next(ne......
  • Python编程常用英文单词大全!收藏别忘了!
      Python编程中常用的英文单词非常丰富,这些单词涵盖了编程的各个方面,包括基础概念、数据类型、控制结构、函数与模块、类与对象、异常处理等。以下是一些常用的英文单词及其简要说明:1.基础概念Variable(变量):用来存储和表示数据的容器。Function(函数):一段可重复使用的代码......
  • 代码随想录算法训练营day09|151.翻转字符串里的单词,卡码网:55.右旋转字符串,28.实现 str
    151.翻转字符串里的单词题目链接:https://leetcode.cn/problems/reverse-words-in-a-string/description/暴力removeExtraSpaces:voidremoveExtraSpaces(string&s){for(inti=s.size()-1;i>0;i--){if(s[i]==''&&s[i]=......
  • CF1503E 2-Coloring
    CF1503E2-Coloringcjx组合强。思路观察一下题目,不难发现只有当黄色形成如下的单峰时才合法。(染错色了,将就一下)其中两座峰的峰顶高度相加等于\(m\),为了方便统计,我们钦定右边的峰一定在左峰下方的行出现,最后答案乘以二就是最终方案。发现对于每一边是两个最长不下降子序列......
  • leetcode面试经典150题-13. 罗马数字转整数
    https://leetcode.cn/problems/roman-to-integer/description/?envType=study-plan-v2&envId=top-interview-150 GOpackageleetcode150import"testing"/*romanMap:=map[string]int{"I":1,"V":......
  • 力扣面试经典算法150题:找出字符串中第一个匹配项的下标
    找出字符串中第一个匹配项的下标今天的题目是力扣面试经典150题中的数组的简单题:找出字符串中第一个匹配项的下标题目链接:https://leetcode.cn/problems/find-the-index-of-the-first-occurrence-in-a-string/description/?envType=study-plan-v2&envId=top-interview-......
  • CF1503E 2-Coloring
    CF1503E2-Coloring题目大意略过。做法解析不会组合,使用了DP,但其实本质相同。我们假设所有的格子都是蓝色的,然后考虑将一些格子换成黄色的。我们考虑从每一行的两头开始将格子换成黄色,只要不把整一行都换成黄色的我们就可以保证每一行恰好有一段蓝色的格子。为了保证每一......
  • 11. 盛最多水的容器【 力扣(LeetCode) 】
    一、题目描述给定一个长度为n的整数数组height。有n条垂线,第i条线的两个端点是(i,0)和(i,height[i])。找出其中的两条线,使得它们与x轴共同构成的容器可以容纳最多的水。返回容器可以储存的最大水量。说明:你不能倾斜容器。二、测试用例示例1:输入:[1,......
  • 15. 三数之和【 力扣(LeetCode) 】
    一、题目描述给你一个整数数组nums,判断是否存在三元组[nums[i],nums[j],nums[k]]满足i!=j、i!=k且j!=k,同时还满足nums[i]+nums[j]+nums[k]==0。请你返回所有和为0且不重复的三元组。注意:答案中不可以包含重复的三元组。二、测试用例示例1:输......