2019年7月9日 第十三次练习(58.最后一个单词的长度)

58 最后一个单词的长度

最近家里面有人住院,作为家里每天没什么事情的劳动力就每天都被拉去陪床,回家很晚了,所以练习又开始 断断续续的写了,但有时间还是不能断的。
今天的练习题目是:给定一个仅包含大小写字母和空格 ’ ’ 的字符串,返回其最后一个单词的长度。如果不存在最后一个单词,请返回 0 。

初看到这个题目时,想法是读出空格所在的字符位置,然后总长度减去空格所在字符的位置再减去1就是后面剩余单词的长度了。

这种想法就要将情况考虑全面,要考虑最后一个或者几个是否是空格,考虑单词和单词中间可能不止有一个空格,或者整个句子中没有空格的情况:

class Solution {
public:
    int lengthOfLastWord(string s) {
        int len=s.length();
        int k=0;//记录某个空格前面字符的数量
        int n=0;//记录空格的数量
        int local=0;//记录位置(即最后一个单词的数量)
        
      
        while(s[len-1]==' ')//考虑最后一个或几个字符是空格
            len=len-1;
                
        for(int i=0;i<len;i++){
            if(s[i]!=' ')
                k++;
            else{
                n++; //需要考虑中间可能不止一个空格或者全是空格
                local=len-k-n;    
            }                      
        }
          if(k==len) //考虑没有空格
            return len;
      
        return local;        
    }
};

运行结果:
在这里插入图片描述
(小声BB:其实我第一次运行时时间更短,但后面怎么也运行不出来了嘤嘤嘤在这里插入图片描述

之后看各位大佬解答,发现有两个思路值得借鉴:
方法一

class Solution {
public:
    int lengthOfLastWord(string s) {
        if(s.empty()) return 0;
        int pos=s.find_last_of(' ');//寻找到最后一个空格
        while(pos==s.length()-1)//将末尾的空格全部删除
        {
            if(s.empty()) return 0;
            s.erase(pos);
            pos=s.find_last_of(' ');
        }
        return s.length()-pos-1;
    }
};

其实最后的操作和我的想法相同,但里面用了一个erase——用于去除找到的空格,和ss.find_last_of()——用于找到最后一个空格的位置。
执行后:
在这里插入图片描述

方法二:运用字符串流,直接自动过滤空格并且得到单词。

class Solution {
public:
    int lengthOfLastWord(string s)
    {
        string word;
        stringstream ss(s);//字符串输入输出流自动过滤空格
        while(ss>>word){}//读取到最后一个单词
        return word.size();
    }
};

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值