字串問題 翻轉字串

2021-08-07 03:53:08 字數 2765 閱讀 8234

【題目】

給定乙個字元型別的陣列chas,請在單詞間做逆序調整,只要做到單詞順序逆序即可,對空格的位置沒有特別要求。例如把chas看成字串為「i love you」,調整成「you love i」。

【補充題目】

給定乙個字元型別的陣列chas和乙個整數size,請把大小為size的左半區整體移到右半區,右半區整體移到左邊。例如,如果把chas看作字串「abcde」,size = 3,調整成「deabc」。

【基本思路】

原問題。首先對整個陣列逆序,然後遍歷陣列找到每乙個單詞,將每個單詞裡的字元進行逆序即可。

補充問題

方法一。先把chas[0…size-1]部分逆序,再把chas[size…n-1]部分逆序,最後再將整體逆序即可。

方法二。舉例說明,chas = 「1234567abcd」,size = 7。

將 「abcd」與 「1234」整體進行交換,得到結果「abcd5671234」。

保持 「abcd」不動,將「567」和「234」整體進行交換,得到結果「abcd2341567」。

保持「abcd」「567」不動,將「1」與「2」進行替換,得到結果「abcd1342567」。

將「2」與「3」交換,得到結果「abcd1243567」。

將「3」與「4」交換,最終結果為「abcd1234567」。

下面是用python3.5實現的**。

#翻轉字串

#原問題

defrotateword

(chas):

defreverse

(chas, start, end):

while start < end:

chas[start], chas[end] = chas[end], chas[start]

start += 1

end -= 1

if chas == none

or len(chas) == 0:

return

reverse(chas, 0, len(chas)-1)

left = -1

right = -1

for i in range(len(chas)):

if chas[i] != ' ':

left = i if i == 0

or chas[i-1] == ' '

else left

right = i if i == len(chas)-1

or chas[i+1] == ' '

else right

if left != -1

and right != -1:

reverse(chas, left, right)

left = -1

right = -1

return chas

#補充問題

#方法一

defrotate2

(chas, size):

defreverse

(chas, start, end):

while start < end:

chas[start], chas[end] = chas[end], chas[start]

start += 1

end -= 1

if chas == none

or len(chas) == 0

or size < 0:

return

reverse(chas, 0, size-1)

reverse(chas, size, len(chas)-1)

reverse(chas, 0, len(chas)-1)

return chas

#方法二

defrotate1

(chas, size):

defexchange

(chas, start, end, size):

i = end - size + 1

while size > 0:

chas[start], chas[i] = chas[i], chas[start]

start += 1

i += 1

size -= 1

if chas == none

or len(chas) == 0

or size < 0:

return

start = 0

end = len(chas) - 1

lpart = size

rpart = len(chas) - size

s = min(lpart, rpart)

d = lpart - rpart

while

true:

exchange(chas, start, end, s)

if d == 0:

break

elif d < 0:

rpart = -d

end -= s

else:

lpart = d

start += s

s = min(lpart, rpart)

d = lpart - rpart

return chas

演算法 字串問題 翻轉字串

翻轉字串 給定乙個字元型別的陣列chas,請在單詞間作逆序調整。只要做到單詞順序逆序即可。例如,如果看成字串 dog loves pig 則調整為 pig loves dog 過程 先整體逆序,在區域性單詞逆序 public static void rotateword char chas reve...

翻轉字串 翻轉單詞字串

將一句話裡面的單詞進行倒置,標點符號不倒換。比如一句話 i come from china.倒換後變成 china.from come i 解析 解決該問題可以分為兩步,第一步全盤置換為 anihc morf emoc i 第二部對每個單詞進行逐步翻轉,如果不是空格,則開始翻轉單詞。具體 如下 in...

字串翻轉

遞迴入門 字串翻 將字串 test 翻轉,變為 tset 解法 遞迴 此題的遞迴跟判斷回文字串的解法原理一樣。只是不是比較兩端字元,而是直接交換。include using namespace std int str turn int low,int high,char p,int length t...