如何反轉字串

2021-08-20 07:42:50 字數 1856 閱讀 4498

按單詞反轉字串是一道很常見的面試題。在python中實現起來非常簡單。

def

reverse_string_by_word

(s):

lst = s.split()  # split by blank space by default

return

' '.join(lst[::-1])

s = 'power of love'

print reverse_string_by_word(s)

# love of power

s = 'hello    world!'

print reverse_string_by_word(s)

# world! hello

上面的實現其實已經能滿足大多數情況,但是並不完美。比如第二個字串中的感嘆號並沒有被翻轉,而且原字串中的空格數量也沒有保留。(在上面的例子裡其實hello和world之間不止乙個空格)

我們期望的結果應該是這樣子的。

print reverse_string_by_word(s)

# expected: !world  hello

要改進上面的方案還不把問題複雜化,推薦使用re模組。你可以查閱

re.split()

的官方文件。我們看一下具體例子。

>>>

import re

>>> s = 'hello  world!'

>>> re.split(r'\s+', s)    # will discard blank spaces

['hello', 'world!']

>>> re.split(r'(\s+)', s)  # will keep spaces as a group

['hello', '  ', 'world!']

>>> s = '< welcome to ef.com! >'

>>> re.split(r'\s+', s)  # split by spaces

['<', 'welcome', 'to', 'ef.com!', '>']

>>> re.split(r'(\w+)', s)  # exactly split by word

['< ', 'welcome', ' ', 'to', ' ', 'ef', '.', 'com', '! >']

>>> re.split(r'(\s+|\w+)', s)  # split by space and word

['<', ' ', '', 'welcome', '', ' ', '', 'to', '', ' ', '', 'ef', '.', 'com', '!', ' ', '>']

>>>

''.join(re.split(r'(\s+|\w+)', s)[::-1])

'> !com.ef to welcome <'

>>>

''.join(re.split(r'(\s+)', s)[::-1])

'> ef.com! to welcome <'

>>>

''.join(re.split(r'(\w+)', s)[::-1])

'! >com.ef to welcome< '

如果你覺得用切片將序列倒序可讀性不高,那麼其實也可以這樣寫。

>>>

''.join(reversed(re.split(r'(\s+|\w+)', s)))

'> !com.ef to welcome <'

一句話搞定,so easy!

字串反轉

據說一道微軟的面試題,要求考慮時間和空間的優化,下面給出幾種通常字串反轉的方法 1 直接陣列操作 char strreverse char str return str 這種做法原來的str沒有儲存,原來的str也改變了 2 指標操作 char strreverse char str return ...

字串反轉

include include include 方法一 將第乙個字元和最後乙個互換,第二個和倒數第二個互換,如此依次迴圈下去 char strrev1 const char str return tmp free tmp 方法二 不額外申請一片儲存字串的記憶體空間,通過中間變數來改變傳遞進來的字串裡...

字串反轉

解法一 第一次看到這題目,想到最簡單 最直覺的解法就是 遍歷字串,將第乙個字元和最後乙個交換,第二個和倒數第二個交換,依次迴圈,即可,於是有了第乙個解法 const char str return tmp 這裡是通過陣列的下標方式訪問字串的字元,實際上用指標直接操作即可。解法二正是基於此,實現 為 ...