58. 最后一个单词的长度[Leetcode 力扣 Java&C完整解答]

12 篇文章 0 订阅
6 篇文章 0 订阅

为什么我要给出完整解答,因为要搜索个题目的解答,很多都偷懒只给个方法的实现,结果跑都跑不起来。于是我就决定,每一题,都给出Java&C两种完整的解答,直接就可以运行,Debug。

题目链接:
最后一个单词的长度
给定一个仅包含大小写字母和空格 ’ ’ 的字符串,返回其最后一个单词的长度。
如果不存在最后一个单词,请返回 0 。
说明:一个单词是指由字母组成,但不包含任何空格的字符串。

示例:

输入: “Hello World”

输出: 5

  • 一、Java完整版
/**
 * 画解算法:58. 最后一个单词的长度
 * 思路
 * 标签:字符串遍历
 * 从字符串末尾开始向前遍历,其中主要有两种情况
 * 第一种情况,以字符串"Hello World"为例,从后向前遍历直到遍历到头或者遇到空格为止,即为最后一个单词"World"的长度5
 * 第二种情况,以字符串"Hello World "为例,需要先将末尾的空格过滤掉,再进行第一种情况的操作,即认为最后一个单词为"World",长度为5
 * 所以完整过程为先从后过滤掉空格找到单词尾部,再从尾部向前遍历,找到单词头部,最后两者相减,即为单词的长度
 * 时间复杂度:O(n),n为结尾空格和结尾单词总体长度
 *
 * 作者:guanpengchn
 * 链接:https://leetcode-cn.com/problems/two-sum/solution/hua-jie-suan-fa-58-zui-hou-yi-ge-dan-ci-de-chang-d/
 * 来源:力扣(LeetCode)
 * 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
 */
public class Main {

    public static void main(String[] args) {
        String str = "Hello World! ";
        int result = lengthOfLastWord(str);
        System.out.println(result);
    }

    public static int lengthOfLastWord(String s){
        //字符串的末尾
        int end = s.length() -1;
        //从尾向头遍历
        //charAt() 方法用于返回指定索引处的字符。索引范围为从 0 到 length() - 1。
        //去掉末尾的空格
        while (end >= 0 && s.charAt(end) == ' '){
            end--;
        }
        //如果小于0直接返回0
        if (end < 0){
            return 0;
        }
        //使start头和尾相等
        int start = end;
        //如果字符串s在start处的值不为空串,start前移
        while (start >= 0 && s.charAt(start) != ' '){
            start--;
        }
        return end - start;
    }
}

  • 二、C完整版
#include <stdio.h>

/**
 * 画解算法:58. 最后一个单词的长度
 * 思路
 * 标签:字符串遍历
 * 从字符串末尾开始向前遍历,其中主要有两种情况
 * 第一种情况,以字符串"Hello World"为例,从后向前遍历直到遍历到头或者遇到空格为止,即为最后一个单词"World"的长度5
 * 第二种情况,以字符串"Hello World "为例,需要先将末尾的空格过滤掉,再进行第一种情况的操作,即认为最后一个单词为"World",长度为5
 * 所以完整过程为先从后过滤掉空格找到单词尾部,再从尾部向前遍历,找到单词头部,最后两者相减,即为单词的长度
 * 时间复杂度:O(n),n为结尾空格和结尾单词总体长度
 *
 * 作者:guanpengchn
 * 链接:https://leetcode-cn.com/problems/two-sum/solution/hua-jie-suan-fa-58-zui-hou-yi-ge-dan-ci-de-chang-d/
 * 来源:力扣(LeetCode)
 * 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
 */
int main() {
    char s[] = "hello world ";
    int lengthOfLastWord(char * s);
    int result = lengthOfLastWord(s);
    printf("%d",result);
    return 0;
}

int lengthOfLastWord(char * s){
    int wordLenth = 0;
    int wordLengthCount = 0;
    //判断是否到了字符串的结尾处
    while (*s != '\0'){
        //判断结尾处的字符是否是空字符
        while (*s != ' '){

            while ((*s != ' ') && (*s != '\0')) {
                //当结尾处的字符串既不是空串也不是结束符'',进行最后一个字符串的计数
                wordLengthCount++;
                wordLenth = wordLengthCount;
                s++;
            }
            //如果s++后到达了结束符号'\0',返回wordLenth
            if (*s == '\0'){
                return wordLenth;
            }
            //当*s == ' '时候,要置零,重新循环
            s++;
            wordLengthCount = 0;
        }
        if (*s == '\0'){
            return wordLenth;
        }
        s++;
    }
    return wordLenth;
}

好了,祝大家都能成为算法大神。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值