58. 最后一个单词的长度

2018-12-07  本文已影响0人  Hoker_
继续做题,暂时先挑简单题目的来练习下C++的用法。

题目描述:

58. 最后一个单词的长度
class Solution {
public:
    int lengthOfLastWord(string s) {
        int len = s.length();
        int ans = 0;
        for(int i = len-1;i>=0;i--){
            // 先去除掉末尾的空格
            if(s[i] == ' ') continue;
            // 根据ans往回循环,同时根据i-ans来判断是否退出循环
            while(i-ans>=0 && s[i-ans]!=' '){
                ans++;
            }
            return ans;
        }
        return ans;
    }
};
用例耗时

有0ms的用例,看下啥样子:

static const auto ban_io_sync = []()
{
    std::ios::sync_with_stdio(false);
    cin.tie(nullptr);
    return 0;
}();
class Solution {
public:
    int lengthOfLastWord(string s) {
        int slong = 0;
        int last_long = 0; // 记录最后一个word的长度
        for (int i = 0; i < s.size(); i++){
            if (s[i] == ' '){ // 每次遇到空格,就重新计算单词长度
                slong = 0;
            }
            else{
                slong++;
                last_long = slong; 
            }
        }
        return last_long;
    }
};

主要还是对用例读取做了下io的优化,排开IO这部分,个人认为这种的代码没有最开始的好,他是读出所有的单词的长度,然后选取最大的,不如直接从后面读的算法。

上一篇下一篇

猜你喜欢

热点阅读