C++ 中反轉字串中的單詞
假設我們有一個包含一些單詞的字串。我們需要反轉字串中的單詞位置。所以如果字串像“The quick brown fox jumps over a lazy dog”
為了解決這個問題,我們將遵循以下步驟:
定義一個函式 getString(),它將 s 作為輸入,它將按以下方式工作:
i := 0,j := s 的大小 – 1
當 s[i] = ' ' 且 i < s 的大小,將 i 增加 1
當 j >= 0 且 s[j] = ' ',將 j 減少 1
ret := 空字串
對於 i <= j,將 i 增加 1
如果 ret 的大小不為零,並且 ret 的最後一個元素是 ' ' 且 s[i] 是 ' ',則進入下一個迭代
ret := ret + s[i]
定義另一個名為 reverseWords() 的方法,它將 s 作為輸入
j := 0
對於 I 在 0 到 s 的大小 – 1 的範圍內,在每一步設定 i := j
如果 s[i] 是空格,則 j := i + 1
否則
當 j + 1 < s 的大小且 s[j + 1] 不是空格,則將 j 增加 1
x := i 且 y := j
當 x < y
交換 s[x] 和 s[y],將 x 增加 1 並將 y 減少 1
將 j 增加 1
從主方法中,執行以下操作:
反轉字串 s
reverseWords(s)
返回 getString(s)
示例(C++)
讓我們看看下面的實現來更好地理解:
#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"));
}輸入
"The quick brown fox jumps over a lazy dog"
輸出
"dog lazy a over jumps fox brown quick The"
廣告
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP