前往
大廳
主題

ZeroJudge - f341: 閱讀順序(Reading) 解題心得

Not In My Back Yard | 2020-11-09 00:00:04 | 巴幣 0 | 人氣 227

題目連結:


題目大意:
輸入有兩列。第一列給定一字串 S(最長不超過 50 個字元),代表要翻轉的字串。第二列給定另一字串 T (S 保證包含 T 作為其子字串),代表翻轉軸。如果 T 在 S 中出現多次,則以從左邊數來第一個為翻轉軸。

S 的翻轉方式如下:
以翻轉軸 T 為中心,將字串切為翻轉軸左側的字串、翻轉軸、翻轉軸右側的字串三個部分。將左側以及右側的字串調換,並再各自反轉其字母的順序,而翻轉軸不動。

請輸出翻轉後的字串。



範例輸入:
範例輸入 #1
apple
ppl

範例輸入 #2
banana
na

範例輸入 #3
split
t

範例輸入 #4
what
wh

範例輸入 #5
complex
ex

範例輸入 #6
overcome
overcome


範例輸出:
範例輸出 #1
eppla

範例輸出 #2
annaab

範例輸出 #3
tilps

範例輸出 #4
tawh

範例輸出 #5
exlpmoc

範例輸出 #6
overcome


解題思維:
就是將字串分成題目大意提及的三部分:
假設字串索引值從 0 開始,且翻轉軸的開頭位於索引值 P 。則該三個部分之索引值範圍為以下
左側:[0, P - 1] 之子字串。
翻轉軸:[P, P + 字串 T 的長度 - 1] 之子字串。
右側:[P + 字串 T 的長度, S 的長度 - 1] 之子字串。

然後將左側與右側交換,並對於每一側使用一般反轉字串的策略(如這題等)。

因此,輸出會是「反轉後的右側」 + 「翻轉軸」 + 「反轉後的左側」。




此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

更多創作