leetcode 557. Reverse Words in a String III 、151. Reverse Words in a String
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; } };