有时候我会怀疑努力的意义,因为我总是花人家好几倍的时间去理解一个狗看了都觉得弱智的问题,思考过后我知道,努力本没有意义,是在未来可能十年内取得成就时突然回想起来之前做过一些事情,未来的成就赋予曾经的意义,所以望不到尽头时最使人绝望。在我接受自己就是个普通人的事实后便豁然开朗,要求开始降低,我开始以做出基础题为自己骄傲,不为理解不了中等题或难题困扰,理解不了就死记硬背呗,如果未来有一道笔试题能套用这道题的模板就有幸了。清楚地认识自己后方向反而明确,我知道做哪些事情会让我进步,或许认识到自己的平凡才是迈向成熟的标志吧 ,于苦痛中爬行,不断向前,做一个罗曼罗兰口中的,认清现实的英雄,一个悲剧的、认清现实的、不屈不挠的“人”。话说的有点多,先看题干吧:
代码;
class Solution {
public:
void reverse(string &s, int start, int end){
for(int i = start, j = end; i < j; i++, j--) swap(s[i], s[j]);
}
void removeExtraSpaces(string &s){
int slow = 0;
for(int fast = 0; fast < s.size(); fast++){
if(s[fast] != ' '){
if(slow != 0) s[slow++] = ' ';
while(fast < s.size() && s[fast] != ' ') s[slow++] = s[fast++];
}
}
s.resize(slow);
}
string reverseWords(string s) {
reverse(s, 0, s.size() - 1);
removeExtraSpaces(s);
int start = 0;
for(int i = 0; i <= s.size(); i++){
if(i == s.size() || s[i] == ' '){
reverse(s, start, i - 1);
start = i + 1;
}
}
return s;
}
};
我知道解题思路是什么,但我始终理解不了这几行;
void removeExtraSpaces(string &s){
//int slow = 0;
//for(int fast = 0; fast < s.size(); fast++){
//if(s[fast] != ' '){
if(slow != 0) s[slow++] = ' ';
while(fast < s.size() && s[fast] != ' ') s[slow++] = s[fast++];
}
}
s.resize(slow);
我实在想象不出来指针是怎么边移动边加空格的,我能理解双指针删除元素,但是这三行我着实理解不了,慢慢来吧。
还有这个:
string reverseWords(string s) {
//reverse(s, 0, s.size() - 1);
//removeExtraSpaces(s);
//int start = 0;
for(int i = 0; i <= s.size(); i++){
if(i == s.size() || s[i] == ' '){
//reverse(s, start, i - 1);
start = i + 1;
}
}
//return s;
}
先记着,等学到后面再来看看吧。