58. 最后一个单词的长度

592 阅读1分钟

1.题目

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

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

示例 1:

输入: s = "Hello World"

输出: 5

示例 2:

输入: s = " fly me to the moon "

输出: 4

示例 3:

输入: s = "luffy is still joyboy"

输出: 6

 

提示:

  • 1 <= s.length <= 104
  • s 仅有英文字母和空格 ' ' 组成
  • s 中至少存在一个单词

2.答题

思路1

倒序循环数组

如果不是空格,最后一个单词增加当前字符;

如果是空格,判断最后一个单词是否有值,有值则跳出循环,返回最后一个单词的长度,没有,则忽略空格继续执行

public int lengthOfLastWord(String s) {
    StringBuilder sb = new StringBuilder();

    for (int i = s.length() - 1; i > 0; i--) {
        if (s.charAt(i) != ' ') {
            sb.append(s.charAt(i));
            continue;
        }

        if (sb.length() > 0) {
            break;
        }
    }

    return sb.length();
}

时间复杂度

使用到了1层循环,故为O(n)

空间复杂度

常量O(1)

提交结果

解题中使用到了StringBuilder存放字符串,但是题目没有要求返回字符串,所有可以使用int记录字符串长度即可

public int lengthOfLastWord(String s) {
    int length = 0;

    for (int i = s.length() - 1; i >= 0; i--) {
        if (s.charAt(i) != ' ') {
            length++;
            continue;
        }

        if (length > 0) {
            break;
        }
    }

    return length;
}

时间复杂度

使用到了1层循环,故为O(n)

空间复杂度

常量O(1)

提交结果