leetcode:557 反轉字串的單詞
阿新 • • 發佈:2018-11-11
題目來源:leetcode
題目描述:給定一個字串,你需要反轉字串中每個單詞的字元順序,同時仍保留空格和單詞的初始順序。
例如:
輸入: “Let’s take LeetCode contest” |
---|
輸出: “s’teL ekat edoCteeL tsetnoc” |
這道題的測試用例很長,一般的兩個迴圈式跑不過的,以下是其中一部分測試用例,後面還有很長
常規的兩個迴圈,測試用例是跑不過的例如下面:
class Solution { public: string reverseWords(string s) { int begin=0; int end=0; while(s[begin]!='\0') { int tmp=end; if(s[end]==' '||s[end]=='\0') { end--; while(begin<end) { char t=' '; t=s[begin]; s[begin]=s[end]; s[end]=t; begin++; end--; } end=tmp; end++; begin=end; } end++; } return s; } };
所以我們需要採用另一種方法,用空間換時間,新開一個str,把反轉的單詞放到str中,程式碼如下:
class Solutin{ public: string reverseWords(string s) { if(s.size()<=1) return s; int begin=0; int end=0; int i; string str;//開一個新的str while(1) { while(end<s.size()&&s[end]!=' ') end++;//找到空格就停下 for(i=end-1;i>=begin;i--) { str+=s[i];//把該單詞的從尾到頭賦值給str } if(end!=s.size()) { str+=' ';//把空格賦值給str } else break;//當end走到s的尾時跳出 begin=end+1;//把begin指向下一個單詞的第一個位置 end++; } return str;//返回str } };
這樣這個最長的測試用例也就可以跑的過了。