Hello_Motty

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

Write a function that takes a string as input and returns the string reversed.

Example:
Given s = "hello", return "olleh".

题意:翻转字符串,从头到尾翻转。

基本思路:

1.如果对指针操作还不熟练,可以通过另分配n个字节的内存来进行翻转。即将字符串从后向前读,然后从前向后保存在新内存中,再将指针指向新内存。

代码如下:(如果不把strlen(s)保存成一个单独的数,会运行超时)

1 char* reverseString(char* s) {
2     assert(s != NULL);
3     int len= strlen(s)-1;
4     char* tmp = (char *)malloc(len+2);
5     for(int i = len; i>=0; --i)
6         tmp[len-i] = s[i];
7     tmp[len+1]='\0';
8     return tmp;
9 }

2.如果对指针掌握已经比较熟练了,那么可以指针的方法,头指针和尾指针互换,向中间移位。这种方法无论是空间还是时间都是最省事的。代码如下:

 1 char* reverseString(char* s) {
 2     assert(s != NULL);
 3     char * beg = s, *end = s+strlen(s)-1, *tmp = s;
 4     while(beg <end)
 5     {
 6         char temp = *beg;
 7         *beg = *end;
 8         *end = temp;
 9         ++beg;
10         --end;
11     }
12     return tmp;
13 }

3.调用C++ STL的方式,<algorithm>中有一个reverse函数,用于翻转各种可以使用双向迭代器的东西。代码如下:

1 class Solution {
2 public:
3     string reverseString(string s) {
4         reverse(&s[0],&s[s.length()]);
5         return s;
6     }
7 };

reverse函数介绍:http://zh.cppreference.com/w/cpp/algorithm/reverse

简单的问题并不是不重要。

posted on 2017-08-22 13:30  Hello_Motty  阅读(264)  评论(0编辑  收藏  举报