题解 | #翻转单词序列#
翻转单词序列
http://www.nowcoder.com/practice/3194a4f4cf814f63919d0790578d51f3
整体的思路是从后向前翻转,遇到空格,将空格后面的字符串放入新创建的字符串中,再重新定义长度,这样便去掉了已经反转的字符,但是由于最开始的字符并不是空格,这样的循环建立不了,便在开头添加一个空格,直到循环到第一个字符。
class Solution { public: string ReverseSentence(string str) { int len1=str.length(); if(len1==0 ||len1==1) return str; string scur={};//创建空字符串,用于接收翻转的字符串 str=' '+str.substr(0);//在原始字符串开始位置加个字符!!!!重点,与下面的循环有关,遇到空格才加 int len=len1+1;//此时长度加长了1 //从后向前翻转,直到第一个数 while(len>=0) { if(str[len]!=' ') { len--; } else if(str[len]==' ') { scur=scur+str.substr(len+1)+' ';//从空格后一个位置加到末尾,再加上一个空格 str.resize(len);//从空格开始,去除尾部刚刚加过的字符,重新定义大小,这样只剩下没有翻转的字符串了 len=str.length(); len--; } } scur.resize(len1);//此时末尾会多一个空格,因为str的本身长度为len1,将最后一个空格删掉 return scur; } };