面试题----翻转单词顺序列

翻转单词顺序列

题目描述:
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--]);*/
    //}
};

猜你喜欢

转载自blog.csdn.net/pigdwh/article/details/82025208