LeetCode#第58题:最后一个单词的长度

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

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

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

复制代码
示例 1:

输入:s = "Hello World"
输出:5
解释:最后一个单词是"World",长度为 5。
示例 2:

输入:s = "   fly me   to   the moon  "
输出:4
解释:最后一个单词是"moon",长度为 4。
示例 3:

输入:s = "luffy is still joyboy"
输出:6
解释:最后一个单词是长度为 6 的"joyboy"。

解析

这道题没有涉及算法,使用快慢指针fast slow,具体步骤如下:

  1. fast,slow同时初始化在第一个字符,无论第一个字符是空格还是字母都不做处理;

  2. fast不断遍历后续元素,如果遇到前一个元素是空格,本位元素是字母的情况,则识别为单词开头,把slow移到fast位置。

  3. 如果fast遍历到\0,表示到末尾了,则进入一个小循环回头到上一个单词最后一个字母

  4. 返回fast-slow+1即为结果

代码实现

bash 复制代码
int lengthOfLastWord(char* s) {
    int slow=0,fast;
    //如果你想要在函数末尾return结果,就不要把int fast写进for循环里
    for(fast=0; ; fast++){
        if(*(fast+s)=='\0'){
        //边界判断,到了边界就回头寻找最后一个单词末尾
            while(1){
                fast--;
                if(*(fast+s)!=' '){
                    break;
                }
            }
            break;
        }
        if(fast!=0&&*(fast+s)!=' '&&*(fast+s-1)==' '){
        //识别到单词头了,则把慢指针移过来
            slow=fast;
        }
    }
    //计算最后一个单词长
    return (fast-slow+1);
}
相关推荐
欧阳小猜2 小时前
深度学习②【优化算法(重点!)、数据获取与模型训练全解析】
人工智能·深度学习·算法
小欣加油2 小时前
leetcode 904 水果成篮
c++·算法·leetcode
有Li2 小时前
CXR-LT 2024:一场关于基于胸部X线的长尾、多标签和零样本疾病分类的MICCAI挑战赛|文献速递-深度学习人工智能医疗图像
论文阅读·人工智能·算法·医学生
君万2 小时前
【LeetCode每日一题】56. 合并区间
算法·leetcode·golang
墩墩同学2 小时前
【LeetCode题解】LeetCode 287. 寻找重复数
算法·leetcode·二分查找
Elieal2 小时前
Java 链表完全指南:从基础到力扣简单题实战
java·leetcode·链表
小南家的青蛙2 小时前
LeetCode第55题 - 跳跃游戏
算法·leetcode·职场和发展
啊我不会诶3 小时前
CF每日4题(1500-1700)
c++·学习·算法
shuououo4 小时前
集成算法学习笔记
笔记·学习·算法
呼啸长风5 小时前
漫谈散列函数
算法