继续做题,暂时先挑简单题目的来练习下C++的用法。
题目描述:
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这部分,个人认为这种的代码没有最开始的好,他是读出所有的单词的长度,然后选取最大的,不如直接从后面读的算法。
网友评论