Given an input string, reverse the string word by word.
For example,
Given s = "the sky is blue
",
return "blue is sky the
".
这是LeetCode最新的一道题目,涉及到string的处理,好像之前我都没随机到字符串处理的问题,不得不说C++的字符串处理比C方便太多了,而java比C++又更方便了。这题思路比较清晰,主流思想有两种,一、从后向起扫描,然后每个单词还需要倒一下。二、直接从第一个开始扫描,然后之后的单词接在之前的单词的前面就OK了,不需要调用reverse(这里提一下,调用reverse之后会增加时间复杂度,所以一的方法并不是线性时间复杂度,很多认为是线性时间的人主要是忽略了这个函数的执行时间,虽然确实这题时间复杂度不是关键,这里顺带一提)所以我选用方法二写了程序。
class Solution {
public:
void reverseWords(string &s) {
string ans, tmp;
int k = 0;
while (s[k] == ' ')
k++;
for (int i = k; i < s.size(); ){
if (s[i] != ' '){
//tmp[j++] = s[i]; ERROR! 这里tmp未初始化也没指明大小,不能这么赋值。
tmp += s[i++];
}
else {
while (s[i] == ' ')
i++;
if (i == s.size())
break;
ans = " " + tmp + ans;
tmp = "";
}
}
s = tmp + ans;
}
};
string这个对象的引入大大方便了对于字符串的处理,下次在这篇中补上string的一些经典知识。