记录LeetCode的第三天| 8月更文挑战

236 阅读1分钟

image.png

58.最后一个单词的长度

题目内容

给你一个字符串 s,由若干单词组成,单词之间用单个或多个连续的空格字符隔开。返回字符串中最后一个单词的长度。如果不存在最后一个单词,请返回 0 。

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

示例

输入:s = "Hello World"
输出:5
输入:s = " "
输出:0

提示

  • 1 <= s.length <= 104
  • s 仅有英文字母和空格 ' ' 组成

解题思路

先说说我拿到题的第一想法吧。通过调用字符串的split()方法,通过空格分开每个单词,再定位到最后一个单词上,用for循环来计算最后一个单词的个数。但是定位不到最后一个单词的下标,以失败告终。(想法还是太简单)

后来想着换个思路,从字符串末尾开始向前遍历,其中主要有两种情况:

  1. 第一种情况,以字符串"Hello World"为例,从后向前遍历直到遍历到头或者遇到空格为止,即为最后一个单词"World"的长度5

  2. 第二种情况,以字符串"Hello World "为例,需要先将末尾的空格过滤掉,再进行第一种情况的操作,即认为最后一个单词为"World",长度为5

所以完整过程为先从后过滤掉空格找到单词尾部,再从尾部向前遍历,找到单词头部,最后两者相减,即为单词的长度

时间复杂度:O(n),n为结尾空格和结尾单词总体长度

解题答案

class Solution {

public int lengthOfLastWord(String s) {

//从后往前 直到找到空格处

int cnt = 0;

for(int i = s.length() - 1;i >= 0;i--){

  if(s.charAt(i) != ' '){

    cnt++;

  }

  else if(cnt != 0){

    return cnt;

  }

}

return cnt;

}

}

文章有写的不好的地方,还请大佬们不吝赐教!!

LeetCode刷题链接放下面啦!

明天也要继续加油鸭!

58. 最后一个单词的长度 - 力扣(LeetCode) (leetcode-cn.com)