題目
針對(duì)一個(gè)字符串弧呐,該字符串是以字符列表的形式存在折晦,請(qǐng)編寫(xiě)一個(gè)函數(shù)教沾,實(shí)現(xiàn)將字符串反轉(zhuǎn)過(guò)來(lái)。
例如:
給定一個(gè)字符列表:["h", "e", "l", "l", "o"]朱转,返回結(jié)果:["o", "l", "l", "e", "h"]
給定一個(gè)字符列表:["h", "a", "n", "n", "a", "H"]蟹地,返回結(jié)果:["H", "a", "n", "n", "a", "h"]
說(shuō)明:
- 不允許使用其他的列表,只能在原列表上處理
- 不允許使用編程語(yǔ)言的內(nèi)置函數(shù)實(shí)現(xiàn)反轉(zhuǎn)藤为,也不允許對(duì)列表進(jìn)行切片操作
實(shí)現(xiàn)思路1
- 使用
雙指針
來(lái)實(shí)現(xiàn) - 定義兩個(gè)指針:left 和 right怪与,left 從列表第一個(gè)位置向中間移動(dòng),right 從列表最后一個(gè)位置向中間移動(dòng)
- left 和 right 移動(dòng)過(guò)程中缅疟,每次都交換對(duì)應(yīng)的元素分别,當(dāng) left 大于或等于 right 時(shí),停止移動(dòng)存淫,此時(shí)即完成對(duì)列表元素的反轉(zhuǎn)
代碼實(shí)現(xiàn)1
def reverseString(s):
left, right = 0, len(s) - 1
while left < right:
s[left], s[right] = s[right], s[left]
left += 1
right -= 1
實(shí)現(xiàn)思路2
- 使用
位運(yùn)算
來(lái)實(shí)現(xiàn) - 針對(duì)列表 s耘斩,我們要實(shí)現(xiàn)原地反轉(zhuǎn),只需要讓前一半元素與后一半元素進(jìn)行交換即可桅咆,如果當(dāng)前元素下標(biāo)是 i括授,那么需交換元素的下標(biāo)即為 - i - 1
- 在
~
按位取反運(yùn)算中:~i
=- i - 1
,所以我們直接讓 s[i] 與 s[~i] 交換就行
代碼實(shí)現(xiàn)2
def reverseString(s):
for i in range(len(s) // 2):
s[i], s[~i] = s[~i], s[i]
更多Python編程題岩饼,等你來(lái)挑戰(zhàn):Python編程題匯總(持續(xù)更新中……)