题目地址:
https://leetcode.com/problems/reverse-words-in-a-string/
给定一个字符串,里面是由单词和空格组成(这里单词的定义是连续的不包含空格的子串,可以包含标点符号等等),要求返回一个字符串,其左右两端不允许有空格,内容是原字符串的所有单词的逆序(单词之间的顺序反一下,但单词内部保持原序)。
可以使用两步翻转法,先将单词内部翻转,接着将整个字符串翻转即可。代码如下:
class Solution {
public:
string reverseWords(string s) {
int n = 0;
// 先去多余的空格
for (int i = 0; i < s.size(); i++) {
if (s[i] == ' ') continue;
int j = i, l = n;
while (j < s.size() && s[j] != ' ') s[n++] = s[j++];
// 将单词逆序
for (int r = n - 1; l < r; l++, r--) swap(s[l], s[r]);
s[n++] = ' ';
i = j;
}
s.resize(n - 1);
reverse(s.begin(), s.end());
return s;
}
};
时间复杂度 O ( n ) O(n) O(n),空间 O ( 1 ) O(1) O(1)。