【剑指Offer】面试题42:反转单词顺序

来源:互联网 发布:mac度数符号怎么打 编辑:程序博客网 时间:2024/05/19 00:09

整理自剑指Offer


一:题目描述

牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?


二:解题思路

第一步:翻转句子中所有字符

如“I am a student.”  --->".tneduts a ma I"

此时不但翻转了句子中单词的顺序,连单词内的字符的顺序也被翻转了

第二步:再翻转句子中每一个字符的顺序,就得到了“student. a am I”



三:代码实现

class Solution {public:         //转换字符串的一段    void Reverse(string &str,int start,int end){                while(start<end){            char temp=str[start];            str[start]=str[end];            str[end]=temp;            start++;            end--;        }    }            string ReverseSentence(string str) {                //边界条件        if(str.empty())            return str;                //翻转整个字符串        Reverse(str,0,str.size()-1);        int i; //记录遍历到字符串的位置        int start=0; //单词的开始位置        int end =0; //单词的结束位置        for(i=0;i<str.size();i++){            //跳过空格,空格可能不止一个            while(i<str.size() && str[i]==' ')                i++;                        start=i;  //记录单词的第一个位置            end=i;            //寻找单词最后一个位置            while(i<str.size() && str[i]!=' ')                i++;            end=i-1;                                     //翻转单词            Reverse(str,start,end);        }        return str;    }    };

阅读全文
0 0
原创粉丝点击