LeetCode解题思路:344. Reverse String

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

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


以上是关于LeetCode解题思路:344. Reverse String的主要内容,如果未能解决你的问题,请参考以下文章

344. Reverse String

Leetcode#344. Reverse String(反转字符串)

Leetcode344. 反转字符串(JAVA双指针)

344. (Reverse String)反转字符串

leetcode344. Reverse String

[LeetCode] 344 Reverse String & 541 Reverse String II