557. Reverse Words in a String III
最簡單的把空白之間的詞反轉
class Solution { public:string reverseWords(string s) {vector<int> blank;for(int i = 0;i < s.size();i++){if(s[i] == ' ')blank.push_back(i);}int start = 0;int end;for(int i = 0;i < blank.size();i++){end = blank[i] - 1;reverse(s,start,end);start = end + 2;}reverse(s,start,s.size() - 1);return s;}void reverse(string& s,int start,int end){while(start < end){char tmp = s[end];s[end] = s[start];s[start] = tmp;start++;end--;}return;} };
?
151. Reverse Words in a String
151題實際上比557題要難一些。難在,字符串中的空格不再僅僅在字符之間,在字符串的開頭和結尾都可能有,并且空格的個數不再僅僅是1,而是有可能有許多。
輸出的要求則是只能是字符+一個空格作為中間的間隔。
思路:先把整個字符串reverse,然后找每個子字符串第一個字符和最后一個,遇到空格都跳過,然后把這些子字符串reverse并+一個空格,最后一個處理的時候,我有點不知道怎么處理多出的末尾
的空格, 就用了一種暴力的方法
class Solution { public:string reverseWords(string s) {if(s.empty())return "";string res = "";reverse(s,0,s.size() - 1);for(int i = 0;i < s.size();i++){if(s[i] != ' '){int j = i;while(s[j] != ' ' && j < s.size())j++;reverse(s,i,j-1);res += s.substr(i,j-i);res += " ";i = j;}}res = res.substr(0,res.size() - 1);return res;}void reverse(string& s,int start,int end){while(start < end){char tmp = s[end];s[end] = s[start];s[start] = tmp;end--;start++;}return;} };
?