151.翻轉字串裡的單詞
文章連結:https://programmercarl.com/0151.翻轉字串裡的單詞.html#思路
影片連結:https://www.bilibili.com/video/BV1uT41177fX/?vd_source=6cb513d59bf1f73f86d4225e9803d47b
題目連結:https://leetcode.cn/problems/reverse-words-in-a-string/
class Solution {
public:
//移除多餘空格
void removeExtraSpace(string &s){
//使用快慢指標
int slow=0;
for(int i=0;i<s.size();i++){
if(s[i]!=' '){
if(slow!=0){ //如果不是第一個元素,則向前面加一個空格
s[slow++]=' ';
}
while(s[i]!=' '&&i<s.size()){
s[slow++]=s[i++];
}
}
}
s.resize(slow); //注意這裡要縮減s的長度,slow後面的元素沒有用的部分
}
//翻轉
void reverse(string &s,int start,int end){
for(int i=start,j=end;i<j;i++,j--){
swap(s[i],s[j]);
}
}
string reverseWords(string s) {
removeExtraSpace(s); //移除不必要的空格
reverse(s,0,s.size()-1);//對整個字串進行翻轉
//對每個單詞進行翻轉
int start=0;
for(int i=0;i<=s.size();i++){
if(s[i]==' '||i==s.size()){
reverse(s,start,i-1);
start=i+1;
}
}
return s;
}
};