翻转单词顺序列
题目描述:
JOBDU最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?
思路:
这里我有两种思路:
a:我们首先对整个字符串进行翻转,然后翻转每个单词,如果这样的话,我们必须考虑最后一个单词不会遇到空格的情况,需要对它进行单个的翻转;
b:我们可以先对每个单词进行翻转,然后我们也需要考虑最后一个单词不会遇到空格的情况,需要对它进行翻转,最后我们对字符串进行整体的翻转。
下面的代码是我在牛客网oj环境下编译测试通过的:
class Solution {
public:
string ReverseSentence(string str) {
//方法一:首先我们对整体进行翻转,然后再对每个单词进行翻转
if(str.size()==0) //判空
return str;
int i;
int left=0;
int right;
RverserHelp(str,left,str.length()-1); //首先进行整体的交换->.tneduts a ma I
for( i=0;i<str.size()-1;i++)
{
if(str[i]==' ')
{
right=i-1;
RverserHelp(str,left,right);//然后再对每个单词进行翻转
left=i+1;
}
}
RverserHelp(str,left,str.length()-1);//因为最后一个单词不会遇到空格,所以我们单独来翻转它
return str;
}
void RverserHelp(string &str,int left,int right)
{
while(left<right)
{
swap(str[left++],str[right--]);
}
}
//方法二:首先对字符串按照每个空格进行翻转->I ma a .tneduts,
//然后再进行整体的翻转->I am a student.
/* int i;
int left=0,right;
if(str.length()==0) //判空
return str;
for(i=0;i<str.length();i++){
if(str[i]==' '){
right=i-1;
swapstr(str,left,right);
left=i+1;
}
}
//因为最后一个单词不会遇到空格,所以我们单独来翻转它
swapstr(str,left,str.length()-1);
swapstr(str,0,str.length()-1);//进行整体翻转
return str;
}
void swapstr(string &str,int left,int right){
while(left<right)
swap(str[left++],str[right--]);*/
//}
};