leetcode面试经典150题——19 最后一个单词的长度

题目: 最后一个单词的长度

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

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

示例 1:

输入:s = “Hello World”
输出:5
解释:最后一个单词是“World”,长度为5。

leetcode

方法一:最后一个单词的长度 = 末尾字母位置 - 首字母位置 + 1
我们直接从后遍历该字符串,先找到最后一个单词的末尾,当我们第一次遇到s[i]!=’ ',那么此时即为最后一
个单词的结尾,最后一个单词的首字母有2种情况:

  • 第一种是首字母就是字符串第一个元素,此时首字母前面没有空格
  • 第二种是首字母不是字符串的第一个元素,此时首字母前面肯定是空格,而我们要找到首字母前面的空格不仅需要满足s[i]==’ ',还要满足这个空格之后的元素不等于空格,这么做的目的是防止我们找到的是最后一个单词后面的空格。
    时间复杂度:o(n)
    空间复杂度:o(1)
int lengthOfLastWord(string s) {
	int end = 0;
	for(int i = s.size()-1;i>=0;i--){
		if(s[i]!=' '&&end == 0){//找到最后一个单词的结尾 
			end = i;
		}
		if(i<s.size()-1&&s[i]==' '&&s[i+1]!=' '){//限制该空格为最后一个单词前面的空格 
			return end - i;
		}
	}
	return end+1;//前面没找到空格,那么首字母就是第一个元素
}

说明一下代码第4行end==0的原因,这样做是找到最后一个单词的末尾元素后不再更新end的值,也就是当end更改过就停止更改。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值