leetcode 58. Length of Last Word 题解【C++/Java/Python/JS】

58. 最后一个单词的长度
58. Length of Last Word

题目:

给定一个仅包含大小写字母和空格' ' 的字符串,返回其最后一个单词的长度。

如果不存在最后一个单词,请返回0

说明:一个单词是指由字母组成,但不包含任何空格的字符串。

示例:

输入: “Hello World”
输出: 5

题解:

主要思路是从右向左遍历。先找到第一个非空格字符,作为最后一个单词的结束字符,开始计数cnt,继续往左遍历,找到第一个空格,即单词的开始位置,计数结束,返回cnt

技巧:

从右往左遍历。

C++
class Solution {
public:
    int lengthOfLastWord(string s) {
        int n = s.length();
        int i = n - 1;
        while(i >= 0 && s[i] == ' ') { // 寻找第一个非空格字符
            i--;
        }
        if(i < 0) {
            return 0;
        }
        int cnt = 0;
        while(i >= 0 && s[i] != ' ') {// 统计非空格字符的长度,即为最后一个单词的长度
            cnt++;
            i--;
        }
        return cnt;
    }
};
Java
class Solution {
    public int lengthOfLastWord(String s) {
        int n = s.length();
        int i = n - 1;
        while(i >= 0 && s.charAt(i) == ' ') {// 从右往左寻找第一个非空格字符
            i--;
        }
        if(i < 0) {
            return 0;
        }
        int cnt = 0;
        while(i >= 0 && s.charAt(i) != ' ') {// 统计非空格字符即为最后一个单词的长度
            cnt++;
            i--;
        }
        return cnt;
    }
}
Python
class Solution(object):
    def lengthOfLastWord(self, s):
        """
        :type s: str
        :rtype: int
        """
        n = len(s)
        i = n - 1
        while i >= 0 and s[i] == ' ': # 从右往左找第一个非空格字符
            i -= 1
        if i < 0:
            return 0

        cnt = 0
        while i >= 0 and s[i] != ' ': # 统计连续非空格字符的数量,即为最后一个单词的长度。
            i -= 1
            cnt += 1
        return cnt
JavaScript
/**
 * @param {string} s
 * @return {number}
 */
var lengthOfLastWord = function(s) {
    var n = s.length;
    var i = n - 1;
    while (i >= 0 && s[i] == ' ') {//从右往左找第一个非空格字符,即最后一个单词的结束字符
        i -= 1;
    }
    var cnt = 0;
    while(i >= 0 && s[i] != ' ') {//从右往左找第一个空格符号,即最后一个单词的开始位置
        i -= 1;
        cnt += 1;
    }
    return cnt;
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值