• leetcode:58. 最后一个单词的长度


    题目:

    函数原型:

    int lengthOfLastWord(char * s)

    解析:

    求最后一个单词的长度,我们有两种思路

    第一种思路:

    逆向求,先设置一个字符串下标index,定位到最后一个单词的最后一个字符。再一个设置长度变量n,从后向前遍历,直到遇到“空格”或者下标index小于0停止遍历,每次前移n++,最后返回长度变量n

    关键1:如何定位到最后一个单词的最后一个字符?

    定位到最后一个单词的最后一个字符,即定位到字符串中最后一个非空格字符。我们可以通过求字符串长度,先定位到字符串的最后一个字符。如果该字符是空格,那么下标index前移,直到遇到非空格字符。这样我们就可以定位到最后一个单词的最后一个字符

    关键2:最后一个单词长度,即变量n如何求?

    当我们定位到最后一个单词的最后一个字符时,只要继续前移直到遇到空格字符或者下标小于0,前移的次数就是变量n的值,即最后一个单词的长度

    关键3:为什么关键2中前移停止条件包含下标小于0呢?

    因为如果字符串中只有一个单词,第一个单词就是最后一个单词,那么前移永远无法遇到空格字符,就会变为死循环,要想停下来下标index必须大于0

    1. int lengthOfLastWord(char * s){
    2. //定位到最后一个单词的最后一个字符
    3. int size = strlen(s);
    4. int index = size - 1;
    5. while (s[index] == ' ')
    6. {
    7. index--;
    8. }
    9. //设置长度变量n
    10. int n = 0;
    11. while (index >= 0 && s[index] != ' ')
    12. {
    13. index--;
    14. n++;
    15. }
    16. return n;
    17. }

     第二种思路:

    正向求,先设置好字符串下标index和长度变量n,初始值都为0。 从前向后遍历,直到遍历完最后一个字符。每次遇到非空格字符,要判断一下当前字符的前一个字符是否为空格字符(判断条件还要加上index下标大于0),如果是,则说明此时正在遍历的是一个新的单词,前面的已经遍历的一定不是最后一个单词,长度变量n要重置为0。如果不是,长度变量n++。最后返回n。

     

    关键1:为什么判断前一个字符是否为空格字符时需要加上index>0

    因为当判断第一个字符的前一个字符是否为空格字符时,s [ index - 1]会越界,s[ -1 ]不存在

    1. int lengthOfLastWord(char* s)
    2. {
    3. int n = 0;
    4. int index = 0;
    5. while (s[index] != '\0')//从前向后遍历字符串
    6. {
    7. if (s[index] != ' ')
    8. {
    9. if (index > 0 && s[index - 1] == ' ')//判断前一个字符是否为空格字符
    10. {
    11. n = 0;//新单词,重置长度变量
    12. }
    13. n++;
    14. }
    15. index++;
    16. }
    17. return n;
    18. }

     

  • 相关阅读:
    【计算机网络】概述
    Go-Python-Java-C-LeetCode高分解法-第八周合集
    再谈GOF设计模式的设计原则
    [设计模式] 浅谈SOLID设计原则
    【含java2023面试题】HashMap、HashTable、ConcurrentHashMap
    【Vue】07 绑定样式 条件渲染
    wordpress子比主题文章翻译api接口
    代码随想录二刷 |链表 | 移除链表元素
    postgresql参数优化
    前端新手Vue3+Vite+Ts+Pinia+Sass项目指北系列文章 —— 第六章 样式格式化 (Sass配置)
  • 原文地址:https://blog.csdn.net/2301_76197086/article/details/132757847