編寫一個函數,其做用是將輸入的字符串反轉過來。輸入字符串以字符數組 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++ } }