公衆號:愛寫bug Write a function that reverses a string. The input string is given as an array of characters char[]
.python
Do not allocate extra space for another array, you must do this by modifying the input array in-place with O(1) extra memory.數組
You may assume all the characters consist of printable ascii characters函數
編寫一個函數,其做用是將輸入的字符串反轉過來。輸入字符串以字符數組 char[]
的形式給出。this
不要給另外的數組分配額外的空間,你必須原地修改輸入數組、使用 O(1) 的額外空間解決這一問題。spa
你能夠假設數組中的全部字符都是 ASCII 碼錶中的可打印字符。指針
Example 1:code
Input: ["h","e","l","l","o"] Output: ["o","l","l","e","h"]
Example 2:ci
Input: ["H","a","n","n","a","h"] Output: ["h","a","n","n","a","H"]
第一個字符與最後一個交換位置,繼而第二個與倒數第二個交換位置,一直交換到到中位數 結束。字符串
Java:get
class Solution { public void reverseString(char[] s) { char temp; for(int i=0,j=s.length-1;i<j;i++,j--){ temp=s[i]; s[i]=s[j]; s[j]=temp; } } }
Python3:
class Solution: def reverseString(self, s: List[str]) -> None: """ Do not return anything, modify s in-place instead. """ i = 0 j = len(s) - 1 while (i < j): s[i], s[j] = s[j], s[i]#交換賦值 i+=1 j-=1
其實py3有不少好玩的操做,好比這道題能夠這樣:s=list(reversed(s))
由於 reversed()
函數返回的是一個迭代器,因此要用 list()
函數才行。可是速度不快。
若是是字符串反轉而不是數組還能夠這樣 s=s[::-1]
(字符串切片:string[start:stop:step]
)
總結:
這道題應當解釋雙指針問題最常引用的題目了,其思想是將第一個元素與末尾進行交換,再向前移動到下一個元素,並不斷地交換,直到它到達中間位置。
咱們能夠同時使用兩個指針來完成迭代:一個從第一個元素開始
,另外一個從最後一個元素開始
。持續交換它們所指向的元素,直到這兩個指針相遇。
摘自Leetcode:
總之,使用雙指針技巧的典型場景之一是你想要
從兩端向中間迭代數組。
這時你能夠使用雙指針技巧:
一個指針從始端開始,而另外一個指針從末端開始。