面试题:将一个字符串中的单词逆序
summary
:
题目
给出一个字符串,单词以空格隔开,写一个函数,传进这个字符串的指针,修改这个
字符串,使得单词的顺序相反,比如"I am a student"变成"student a am
I"。要求不能 开辟缓冲区,不能用库函数,不能用 std::string 。
解法
这是千年的老题了,我之前去腾讯面试的时候第一个问题就是这个,结果我不会做,直接被 淘汰了。方法是先把整个字符串倒序,再按单词倒序,这样,求字符串长度是O(n),将整个 字符串倒序是O(0.5n),按单词倒序是O(1.5n),一共O(3n),即为O(n)的时间复杂度。 说起来简单,写起来不简单,在电脑上写都要测试很久,更不要说在纸上写了。
代码
实现及测试的代码如下:
::: {.code-include lexer="cpp"} ./reverse_words_in_a_string.cpp :::
使用了Boost的单元测试框架,链接的时候要加上
-lboost_unit_test_framework 参数。