码迷,mamicode.com
首页 > 其他好文 > 详细

妙计旅行一面试题:字符串反转

时间:2019-03-03 09:56:07      阅读:205      评论:0      收藏:0      [点我收藏+]

标签:函数   lse   复杂度   input   for   ==   ++   时间   题目   

字符串反序

根据输入的字符串,遇到空格或者到字符串末尾,都要进行反转。即只进行单词之内的反转。
例如 This is a macbook -> sihT si a koobcam。
要去:时间复杂度 On

当时面试的时候,一脸懵逼,所以题目做的一塌糊涂。现在又到了要找工作的时间段了,再看到这个题,突然有了眉目。

解题思路:
循环遍历输入的字符串,在遇到空格或者字符串结尾时,对刚才遍历的单词反向写入输出字符串。在循环没有到输入字符串末尾时,每个单词反向写入之后添加空格。

具体的代码:
 1 bool reverse(const char* input, char* output)
 2 {
 3     if (nullptr == input || nullptr == output)
 4     {
 5         return false;
 6     }
 7 
 8     char sep =  ;
 9     size_t index = 0;
10     size_t size = strlen(input);
11     for (size_t i = 0; i < size; ++i)
12     {
13         // 遇到空格或者字符串末尾,才会进行下一步的反转字符串
14         if (input[i] != sep && i != size - 1)
15         {
16             continue;
17         }
18 
19         // 遇到空格,从空格前一个字符开始反向遍历
20         // 到字符串末尾,从当前位置开始反向遍历
21         // 反向遍历的终止是到字符串开始或者遇到空格,这个for循环的下表j的类型不能是size_t
22         for (int j = (i == size - 1) ? i : i - 1; (j >= 0) && input[j] != sep; --j)
23         {
24             output[index++] = input[j];
25         }
26 
27         // 不是字符串末尾时,要在输出字符串末尾添加空格
28         if (i != size - 1)
29         {
30             output[index++] = sep;
31         }
32     }
33     return true;
34 }

 

注意??:使用这个函数,输出字符串的长度需要自己定,要保证的是输出字符串的长度大于等于输入字符串的长度。

妙计旅行一面试题:字符串反转

标签:函数   lse   复杂度   input   for   ==   ++   时间   题目   

原文地址:https://www.cnblogs.com/zhugaopeng/p/10463653.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!