问题
Given an input string, reverse the string word by word.
For example, Given s = "the sky is blue", return "blue is sky the".
面试时我应该至少问的问题
- What constitutes a word? A sequence of non-space characters constitutes a word.
- Could the input string contain leading or trailing spaces? Yes. However, your reversed string should not contain leading or trailing spaces.
- How about multiple spaces between two words? Reduce them to a single space in the reversed string.
我大概想了下,但是没有问出来,需要改进!
代码分析
class Solution { public: static void reverseWords(string &s) { int len = s.length(); string result; for(int i= len - 1; i >= 0; ) { int lastend = 0; while(i >= 0 && s[i] == ' ') //需要先判断i >=0,否则s[i]会出错 { i--; } if(i < 0) //这里需要break,因为可能一连串的空格,没有任何字母,这时就应该及时退出 break; lastend = i; while(i >= 0 && s[i] != ' ') //这里也一样,需要先保证i在合法范围,再访问s[i] { i--; } if(i <= lastend) // i may be -1 { if(!result.empty()) result.append(" "); // 至少有一个字符串时,需要添加空格 result.append(s.substr(i+1, lastend - i)); } } s.assign(result); } };