【題目】
給定乙個字元型別的陣列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...