LeetCode 344 字串的反轉

2021-10-09 14:28:38 字數 1466 閱讀 7144

leetcode 344 —字串的反轉

編寫乙個函式,其作用是將輸入的字串反轉過來。輸入字串以字元陣列 char 的形式給出。

不要給另外的陣列分配額外的空間,你必須原地修改輸入陣列、使用 o(1) 的額外空間解決這一問題。

你可以假設陣列中的所有字元都是 ascii 碼表中的可列印字元。

示例 1:

輸入:[「h」,「e」,「l」,「l」,「o」]

輸出:[「o」,「l」,「l」,「e」,「h」]

示例 2:

輸入:[「h」,「a」,「n」,「n」,「a」,「h」]

輸出:[「h」,「a」,「n」,「n」,「a」,「h」]

分析題意:

輸入是乙個字元陣列 char s形式給出,輸出也是通過char s形式給出;

方法的作用是將輸入的字元陣列反轉過來;

不能給陣列分配額外的空間,使用o(1)的空間複雜度所有的字元都在ascii碼表中可以列印

我們很容易想到通過乙個中間陣列對原來的陣列進行反向賦值,定義乙個字元陣列 char t

對於第乙個例子而言:

t0 = s4 = o

t1 = s3 = l

t2 = s2 = l

t3 = s1 = e

t4 = s0 = h

最後將字元陣列t賦值給s,直接貼上**

class

solution

// 最後將這個陣列賦值給原陣列

for(

int i =

0; i < s.length ; i++)}

}

這種解法不符合題意,有乙個中間陣列的開銷,空間複雜度為o(n),不滿足題意o(1)的額外空間。

有一種很常用的方法,雙指標法,滿足一定條件下,通過首尾兩個指標指向元素交換位置即可實現兩個元素交換,比較抽象,

h e l l o

頭指標 start 指向h ,尾指標指向o ,當頭指標不超過尾指標的時候,就不用交換了即為start >= end。

直接附上**

class

solution

}}

使用遞迴的方法,所有的迴圈都可以使用遞迴實現。遞迴分為兩步

附上**

class

solution

public

static

void

recursion

(int left,

int right ,

char

s)}

雙指標法是一種很常見的處理陣列、鍊錶、字串、樹等方法,涉及到元素比較的場合往往會用到此方法;

迴圈通常也可以用遞迴解決,遞迴需要找到終止條件和遞迴具體實現。

leetcode344 反轉字串

思想 題目要求編寫乙個函式,其作用是將輸入的字串反轉過來。class solution object def reversestring self,s type s str rtype str return s 1 知識點 a 0,1,2,3,4,5,6,7,8,9 b a i j 表示複製a i ...

leetcode344 反轉字串

編寫乙個函式,其作用是將輸入的字串反轉過來。編寫乙個函式,其作用是將輸入的字串反轉過來。示例 1 輸入 hello 輸出 olleh 示例 2 輸入 a man,a plan,a canal panama 輸出 amanap lanac a nalp a nam a 首先想到的是這個 class s...

leetcode 344 反轉字串

題目 344.反轉字串 編寫乙個函式,其作用是將輸入的字串反轉過來。輸入字串以字元陣列char的形式給出。不要給另外的陣列分配額外的空間,你必須原地修改輸入陣列 使用 o 1 的額外空間解決這一問題。你可以假設陣列中的所有字元都是 ascii 碼表中的可列印字元。示例 1 輸入 h e l l o ...