Giả sử chúng ta có một chuỗi với vài từ. Chúng ta phải đảo ngược các vị trí từ trong chuỗi. Vì vậy, nếu chuỗi giống như "Con cáo nâu nhanh nhẹn nhảy qua một con chó lười biếng"
Để giải quyết vấn đề này, chúng tôi sẽ làm theo các bước sau -
-
Xác định một hàm getString (), điều này sẽ lấy s làm đầu vào, điều này sẽ hoạt động như -
-
i:=0, j:=size của s - 1
-
while s [i] =‘’ and i
-
while j> =0 and s [j] =‘’, giảm j đi 1
-
ret:=chuỗi trống
-
đối với i <=j, tăng i lên 1
-
nếu kích thước của ret là khác 0 và phần tử cuối cùng của ret là ‘’ và s [i] là ‘’, thì hãy chuyển sang lần lặp tiếp theo
-
ret:=ret + s [i]
-
-
Xác định một phương thức khác có tên là reverseWords (), phương thức này sẽ lấy s làm đầu vào
-
j:=0
-
đối với I trong phạm vi từ 0 đến kích thước của s-1, trong mỗi bước đặt i:=j
-
nếu s [i] trống, thì j:=i + 1
-
nếu không thì
-
trong khi j + 1
-
x:=i và y:=j
-
trong khi x
-
trao đổi s [x] và s [y], tăng x lên 1 và giảm y đi 1
-
-
tăng j lên 1
-
-
-
Từ phương thức chính, thực hiện như sau -
-
đảo ngược chuỗi s
-
(các) từ khóa ngược lại
-
trả về getString (các)
Ví dụ (C ++)
Hãy cùng chúng tôi xem cách 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++; } } } }; 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"