LeetCode解题思路:344. Reverse String

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

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

转载于:https://www.cnblogs.com/hellomotty/p/7411140.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值