@Leetcode最后一个单词的长度
讲道理,这是一道简单题,也是一道有无数种方法解决的问题,但也就是这道简单题,让笔者一整天茶饭不思debug,那么他到底简单在哪呢?请看题干:
给定一个仅包含大小写字母和空格 ’ ’ 的字符串,返回其最后一个单词的长度。
如果不存在最后一个单词,请返回 0 。
说明:一个单词是指由字母组成,但不包含任何空格的字符串。
示例:
输入: “Hello World”
输出: 5
看完题干,不少大佬已经笑了,这题花上超过5分钟算我输?然后。。。啪啪打脸。废话少说,由于本题解决方法众多,在这里笔者给大家分享一个较为容易想到的简单思路(卡人思路),请看代码:
class Solution {
public:
int lengthOfLastWord(string s) {
int cou=0,ans=0;
int i=0,flag=0;
if(s.size()==0)
return 0;
while(i<s.length())
{
if(s[i]!=' ')
{
cou++;
flag=0;
}
else if(s[i]==' '&&flag==0)
{
ans=cou;
cou=0;
flag=1;
}
i++;
}
if(flag==1)
return ans;
else
return cou;
}
};
代码简单有韵味,但是其中不乏细节。我们先来分析一下思路:既然要最后一个单词的长度,说明前面所有的单词都不需要计数,我们要找到最后一个单词,那就必须确定最后一个单词之前的空格,以及最后一个单词结束时是否还有空格(关键)。
首先我们先要定义几个变量,分别存储当前单词的长度和前一个单词的长度以及标志当前判断和标志是否为空格,接下来的思路是循环判断,只要是字母就计数器增加,否则就直接清零。这里的“否则”是有条件的,是s[I]为’ '&&flag为0,注意这个flag为0很关键,具体为何请读者思考。在改变计数器之前,注意将其付给代表前一个单词长度的变量,最后在输出时,会根据最后一个字符是不是空格来决定是输出前一个单词的长度还是当前单词的长度。
本题的精髓便是判断的条件,也就是这里卡了笔者一整天,大家也可以想想,自己的代码能不能过第46个样例“b a ”,大佬们当然不用说啦,但是希望每个小白也能从中得到收获,读者就曾在编码中查找了strlen,size,length,sizeof的区别,算是聊胜于无吧哈哈。还有一些其他大佬的方法,笔者也就不照搬了,大家可以多多了解。