Giả sử chúng ta có một chuỗi chứa vài từ. Chúng ta phải đảo ngược vị trí các từ trong chuỗi. Ví dụ: "The quick brown fox jumps over a lazy dog" → "dog lazy a over jumps fox brown quick The".
Để giải quyết, chúng ta làm theo các bước:
Định nghĩa hàm getString(s): loại bỏ dấu cách thừa ở đầu/cuối và giữa các từ.
Định nghĩa hàm reverseWordss(s): đảo ngược từng từ riêng lẻ.
Từ phương thức chính: đảo ngược toàn bộ chuỗi s, gọi reverseWordss(s), trả về getString(s).
Ví dụ (C++)
Hãy xem triển khai sau để hiểu rõ hơn:
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
string reverseWords(string s) {
reverse(s.begin(), s.end());
reverseWordss(s);
return getString(s);
}
string getString(string s){
int i = 0;
int j = s.size() - 1;
while(s[i] == ' ' && i < s.size()) i++;
while(j >= 0 && s[j] == ' ') j--;
string ret = "";
for(; i <= j; i++){
if(ret.size() && ret.back() == ' ' && s[i] == ' ') continue;
ret += s[i];
}
return ret;
}
void reverseWordss(string& s){
int j = 0;
for(int i = 0; i < s.size() ; i = j){
if(s[i] == ' '){
j = i + 1;
} else{
while(j + 1 < s.size() && s[j + 1] != ' ') j++;
int x = i;
int y = j;
while(x < y){
swap(s[x], s[y]);
x++;
y--;
}
j++;
}
}
}
};
int main(){
Solution ob;
cout << (ob.reverseWords("The quick brown fox jumps over a lazy dog"));
}
Đầu vào
"The quick brown fox jumps over a lazy dog"
Đầu ra
"dog lazy a over jumps fox brown quick The"