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

LeetCode解题思路:344. Reverse String

时间:2017-08-22 13:54:21      阅读:139      评论:0      收藏:0      [点我收藏+]

标签:style   tmp   .cpp   reverse   移位   algorithm   get   write   strlen   

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

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

LeetCode解题思路:344. Reverse String

标签:style   tmp   .cpp   reverse   移位   algorithm   get   write   strlen   

原文地址:http://www.cnblogs.com/hellomotty/p/7411140.html

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