【字符串】leetcode——反转字符串

编号344: 反转字符串

编写一个函数,其做用是将输入的字符串反转过来。输入字符串以字符数组 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++
	}
}
相关文章
相关标签/搜索