https://leetcode.com/problems/reverse-words-in-a-string/
Given an input string, reverse the string word by word.
Example:
Input: "the sky is blue
", Output: "blue is sky the
".
Note:
- A word is defined as a sequence of non-space characters.
- Input string may contain leading or trailing spaces. However, your reversed string should not contain leading or trailing spaces.
- You need to reduce multiple spaces between two words to a single space in the reversed string.
代码:
class Solution {
public:
void reverseWords(string &s) {
int len = s.length();
int newlen = 0;
reverse(s.begin(), s.end());
for(int i = 0; i < len; i ++) {
if(s[i] != ' ') {
if(newlen != 0) s[newlen ++] = ' ';
int temp = i;
while(temp < len && s[temp] != ' ')
s[newlen ++] = s[temp ++];
reverse(s.begin() + newlen - (temp - i), s.begin() + newlen);
i = temp;
}
}
s.resize(newlen);
}
};
$char$ 代码:
#include <bits/stdc++.h> using namespace std; char s[1010]; char ans[1010][30]; int main() { cin.getline(s, 1010); int len = strlen(s); s[len] = ' '; len ++; s[len] = '\0'; int cnt = 0; for(int i = 0; i < len; i ++) { if(s[i] != ' ') for(int j = i; j < len; j ++) { if(s[j] != ' ') continue; else { cnt ++; for(int k = i; k < j; k ++) ans[cnt][k - i] = s[k]; i = j; break; } } } for(int i = 1; i <= cnt; i ++) cout << ans[i] << endl; return 0; }
很神奇诶 以前只写过 $char$ 的反转 讲真 $string$ 是真的不怎么会 这道题是先整个反转 然后找到每个单词再反转 $newlen$ 记录新的长度 然后最后重新给 $s$ 分配一个大小为 $newlen$ 的空间 今天依旧是有点菜的一天哦