自学内容网 自学内容网

Leetcode 每日一题 58.最后一个单词的长度

问题描述

给定一个字符串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(最后一个单词是“joyboy”,长度为6)

算法分析

要解决这个问题,我们可以从字符串的末尾开始遍历。我们需要跳过尾部的空格,然后找到最后一个单词的起始位置,并计算它的长度。这个过程需要考虑几个关键点:

  1. 去除尾部空格:使用trim()方法可以去除字符串尾部的空格。
  2. 识别单词:我们需要识别出单词的起始和结束位置。单词由连续的字母组成,单词之间由空格分隔。
  3. 计算长度:一旦找到单词的起始位置,我们就可以计算它的长度,直到遇到空格或字符串的开始。

Java实现

下面是一个Java实现的示例:

 

java

class Solution {
    public int lengthOfLastWord(String s) {
        // 去除字符串尾部的空格
        s = s.trim();
        // 如果字符串为空,返回0
        if (s.length() == 0) {
            return 0;
        }
        // 从字符串的末尾开始遍历
        int length = 0;
        boolean isWord = false; // 标记是否处于单词中
        for (int i = s.length() - 1; i >= 0; i--) {
            // 如果当前字符是字母,并且之前不是在单词中,说明找到了单词的起始位置
            if (Character.isLetter(s.charAt(i)) && !isWord) {
                isWord = true;
                length = 1; // 单词长度至少为1
            } else if (Character.isLetter(s.charAt(i)) && isWord) {
                // 如果当前字符是字母,并且之前已经在单词中,增加单词长度
                length++;
            }
            // 如果当前字符是空格,并且之前是在单词中,说明已经离开了单词
            else if (!Character.isLetter(s.charAt(i)) && isWord) {
                break; // 离开循环
            }
        }
        return length;
    }
}

总结

这个问题是一个典型的字符串处理问题,它涉及到字符串的遍历和条件判断。通过从字符串的末尾开始遍历,并使用一个布尔变量来标记是否处于单词中,我们可以有效地找到最后一个单词并计算其长度。这种方法简单而高效,适用于处理包含空格和单词的字符串。


原文地址:https://blog.csdn.net/weixin_73687229/article/details/143695454

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