Reverse Words in a String,reversewords

來源:互聯網
上載者:User

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;}}}};



聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.