【字符串】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++
	}
}
相關文章
相關標籤/搜索