字串翻轉

2021-08-28 16:05:35 字數 1025 閱讀 1967

給定乙個字串,要求將字串前面的若干字元移到字串的尾部。例如,將字串「abcdef」的前3個字元』a』、'b』和』c』移到字串的尾部,那麼原字串將變成「defabc」。請寫乙個函式實現此功能。

//解法一:蠻力移位

//時間複雜度為o(mn),空間複雜度o(1)

void leftshiftone(char* s, int n)

s[n - 1] = t;

}//呼叫m次leftshiftone,使得字串開頭的m個字元移到字串的尾部

void leftrotatestring(char* s, int n, int m)

}

既然題目要求將字串前面的那部分原封不動地移到字串的尾部,那麼是否可以把需要移動的部分跟不需要移動的部分分開處理呢?

例如:可以先將乙個字串分割成兩個部分,然後將這兩個部分的字串分別反轉,最後再對整個字串進行整體反轉,即可解決字串旋轉的問題

拿題目中的例子來說,給定字串「abcdef」,若要將「def」移動到「abc」前面,只需要按照下面3個步驟操作即可

將原串分為x和y兩個部分,其中x為「abc」,y為「def」

將x的所有字元反轉,即相當於反轉「abc」得到「cba」;再將y的所有字元也反轉,即相當於反轉「def」得到「fed」將x的所有字元反轉,即相當於反轉「abc」得到「cba」;再將y的所有字元也反轉,即相當於反轉「def」得到「fed」

最後,將上述步驟得到的結果再給予整體反轉,即整體反轉「cbafed」得到「defadc」,這樣,就實現了字串的反轉最後,將上述步驟得到的結果再給予整體反轉,即整體反轉「cbafed」得到「defadc」,這樣,就實現了字串的反轉

//解法二:三步反轉

//時間複雜度o(n),空間複雜度o(1)

void reversestring(char* s, int start, int end)

}void leftrotatestring(char* s, int n, int m)

翻轉字串 翻轉單詞字串

將一句話裡面的單詞進行倒置,標點符號不倒換。比如一句話 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...

字串翻轉

字串翻轉是常見筆試面試題,記錄下來 include include void reverse const char src char dest intstrlen strlen src while strlen void strrev ms char input char output int le...