剑指offer——面试题42:翻转单词序列

来源:互联网 发布:ie加载项里面没有java 编辑:程序博客网 时间:2024/06/15 10:05

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

    分析:这道题题目描述有非常大的问题!!!《剑指offer》书上描述是对的,如果给出 "I am a student. ",注意,最后一个单词后面有个空格,否则,程序怎么改都是通过 0.00%,但是输出结果是相同的,只能说,牛客网坑人啊!

    我的代码:

class Solution {public:    string ReserveWord(string str1)    {            string word;            string reverseSentence;            for (int i = 0; i < str1.size(); i++){while (str1[i] != ' ' && str1[i] != NULL)  // 必须加一个 != NULL,否则会多输出一个随机值{word += str1[i];cout << i << endl;cout << word << endl;i++;if (str1[i] == ' '){//cout << "跳出来一次" << endl;break;   // 第一次跳出break,word = .tneduts}   }// 处理word ,将其颠倒,然后清空for (int i = word.size() - 1; i >= 0; --i){reverseSentence += word[i];}reverseSentence += ' ';  // 补充一个空格word.erase();}            return reverseSentence;    }        string ReverseSentence(string str) {        string tempstr;        string reverse_str;        for(int i = str.size() -1; i >= 0; --i)        {            tempstr += str[i];   // 将整个字符串完全颠倒。如 i am student. ->.tneduts ma i        }        reverse_str = ReserveWord(tempstr);        return reverse_str;    }};

    如果使用 STL reserve() 函数,更简单了

class Solution {public:    string ReverseSentence(string str) {        int size = str.size();        reverse(str.begin(), str.end()); // 注意:翻转后的第一个字符是空格        int start = 0;        for(int i = 0; i < size; ++i)            {            if(str[i] == ' ')                {                reverse(str.begin()+start, str.begin()+i);                start = i+1; // 每个单词的第一个下标            }            if(i == size-1)  // 翻转最后一个单词                reverse(str.begin()+start, str.end());        }        return str;    }};


阅读全文
2 0