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

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

a4e3b8a73f51f724df53ea5a7af5b3aa_60c86d7a9fe944299a8d7f47db869ac1.png

函数原型:

int lengthOfLastWord(char * s)

解析:


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


第一种思路:


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


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


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


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


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


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


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

int lengthOfLastWord(char * s){
//定位到最后一个单词的最后一个字符
int size = strlen(s);
int index = size - 1;
while (s[index] == ' ')
{
  index--;
}
//设置长度变量n
int n = 0;
while (index >= 0 && s[index] != ' ')
{
  index--;
  n++;
}
return n;
}


第二种思路:


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



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


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

int lengthOfLastWord(char* s)
{
  int n = 0;
  int index = 0;
  while (s[index] != '\0')//从前向后遍历字符串
  {
  if (s[index] != ' ')
  {
    if (index > 0 && s[index - 1] == ' ')//判断前一个字符是否为空格字符
    {
    n = 0;//新单词,重置长度变量
    }
    n++;
  }
  index++;
  }
  return n;
}


目录
相关文章
|
1天前
leetcode-434:字符串中的单词数
leetcode-434:字符串中的单词数
29 1
|
1天前
【力扣】58. 最后一个单词的长度
【力扣】58. 最后一个单词的长度
|
1天前
|
存储 算法
力扣318 最大单词长度乘积
力扣318 最大单词长度乘积
|
7月前
|
存储
【Leetcode-58.最后一个单词的长度 -66.加一】
【Leetcode-58.最后一个单词的长度 -66.加一】
31 0
|
11月前
|
算法 安全 Swift
LeetCode - #58 最后一个单词的长度
不积跬步,无以至千里;不积小流,无以成江海,Swift社区 伴你前行。如果大家有建议和意见欢迎在文末留言,我们会尽力满足大家的需求。
|
11月前
leetcode:58.最后一个单词的长度
给定一个仅包含大小写字母和空格 ’ ’ 的字符串,返回其最后一个单词的长度。
37 0
|
12月前
7-81 单词长度
7-81 单词长度
78 0
|
算法
leetcode-438. 找到字符串中所有字母异位词(滑动窗口)
时间复杂度: O((n - m) * m) 其中n表示s字符串的长度,m表示p字符串的长度,因为一次滑动窗口对比字符数量的时间是O(m),总共滑动n - m次
79 0
leetcode-438. 找到字符串中所有字母异位词(滑动窗口)
每日三题-无重复字符的最长子串、最长连续序列、找到字符串中所有字母异位词
每日三题 无重复字符的最长子串 最长连续序列 找到字符串中所有字母异位词
74 1
每日三题-无重复字符的最长子串、最长连续序列、找到字符串中所有字母异位词
Leetcode | 连接两字母单词得到的最长回文串
Leetcode | 连接两字母单词得到的最长回文串
109 0
Leetcode | 连接两字母单词得到的最长回文串