Reverse Words in a String,reversewords
原題連結:https://oj.leetcode.com/problems/reverse-words-in-a-string/
題目大意:以單詞為單位翻轉整個字串,如“I am a coder",翻轉後為"coder a am I”
階梯方法:兩次reverse
思路:進行2次reverse,第一次翻轉整個字串,第二次翻轉單個單詞。如“I am a coder",第一次翻轉後為”redoc a ma I",第二次翻轉為“coder a am I"。需要考慮的邊界條件為,首尾出線空格,以及單詞間有連續多個空格。
時間複雜度:O(N) 空間複雜度: constant space
class Solution {public: void reverseWords(string &s) {if(s.empty())return ;reverse(s,0,s.length()-1);int start=0;for(int i=0;i<s.length();i++){if(s[i]==' '){reverse(s,start,i-1);start=i+1;}}reverse(s,start,s.length()-1);//下面處理連續空格或者首尾空格while(!s.empty()&&s[0]==' '){s.erase(0,1);}while(!s.empty()&&s[s.length()-1]==' '){s.erase(s.length()-1,1);}//處理兩個字元中間多個空格的情形,經過上面處理若s不為空白,則首尾必不為空白格if(!s.empty()){for(int i=0;i<s.length()-1;){while(s[i]==' '&&s[i+1]==' ')s.erase(i+1,1);i++;}} }void reverse(string &s,int start,int end){if(start<end){char temp;int i, j;for(i=start,j=end;i<j;i++,j--){temp=s[i];s[i]=s[j];s[j]=temp;}}}};