编写一个函数,其做用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。java
不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。python
你能够假设数组中的全部字符都是 ASCII 码表中的可打印字符。c++
示例 1:golang
输入:["h","e","l","l","o"] 输出:["o","l","l","e","h"]
示例 2:面试
输入:["H","a","n","n","a","h"] 输出:["h","a","n","n","a","H"]
这里你们一看,这不是简单吗,若是是c++/java,直接调用库函数reverse一句就搞定啦,不过若是这么作题的话,这样你们不会清楚反转字符串的实现原理了。可是也不是说库函数就不能用,是要分场景的。算法
若是在现场面试中,咱们何时使用库函数,何时不要用库函数呢?数组
「若是题目关键的部分直接用库函数就能够解决,建议不要使用库函数。」函数
毕竟面试官必定不是考察你对库函数的熟悉程度, 若是使用python和java 的同窗更须要注意这一点,由于python、java提供的库函数十分丰富。指针
「若是库函数仅仅是解题过程当中的一小部分,而且你已经很清楚这个库函数的内部实现原理的话,能够考虑使用库函数。」code
建议你们平时在leetcode上练习算法的时候本着这样的原则去练习,这样才有助于咱们对算法的理解。
在golang中的strings包中并无提供reverse这种方法的,不过要想实现反转操做仍是很简单的,思路是双指针
分别操做数组的开始位和结束位,直到两者相遇。
具体代码以下:
func reverseString(s []byte) { for i, j := 0, len(s)-1; i < j; j-- { s[i], s[j] = s[j], s[i] // 至关于减小了中间临时变量 数组第0位与数组最后一位交换 i++ } }