每日一帖 資料結構與演算法之字串旋轉

2021-06-25 15:36:25 字數 743 閱讀 1048

面試或者筆試經常被問到字串旋轉,很多面試官還會問原理,下面我們就研究一下字串的旋轉面試或者筆試經常被問到字串旋轉,很多面試官還會問原理,下面我們就研究一下字串的旋轉

試題給定乙個字串,要求把字串前面的若干個字元移動到字串的尾部,如把字串「abcdef」前面的2個字元'a'和'b'移動到字串的尾部,使得原字串變成字串「cdefab」。請寫乙個函式完成此功能,要求對長度為n的字串操作的時間複雜度為 o(n),空間複雜度為 o(1)。

暴力演算法因為時間負責度為o(m*n)不符合要求,就不在贅述了。

這個演算法的原理就是c=ab

a為要旋轉的字串,

最後我們要獲得為d=ba,

(a^tb^t)=(ba)^t

所以((a^tb^t))^t=((ba)^t)^t=(ba)

歸根到底就是要乙個字串逆序

通過a逆序,b逆序,然後再對a逆序b逆序的字串逆序就獲得了ba

放到我們這個例子中就是

abcdef  中的'a'和『b』移動到字串尾

a=ab,b=cdef

a^t=ba,b^t=fedc

a^tb^t=bafedc,((a^tb^t))^t=cdefab

下面是**:

public class leftreversestr {

public static void reverse(char str,int start,int end)

{while(start



資料結構演算法之字串

字串是由若干個字元組成,在c c 中常常使用 0 字元作為結尾,這樣很方便的為我們查詢到字串的最後乙個字元。為了節省空間,c c 常常將字串單獨放到乙個記憶體空間中,當幾個指標賦予相同的變數時,實際上他們會指向相同的位址空間 實現乙個函式將字串中的空格替換成 20 實現方式 方式一 如果是建立新的字...

資料結構與演算法 字串

判斷乙個串是不是回文串,往往要分開編寫,造成 的拖沓 int longestpalindrome const char s,int n return max void longestpalindrome test 上面的迴圈中,對於回文長度本身的奇偶性,我們進行區別處理。這樣有點拖沓。我們根據乙個簡...

資料結構與演算法 字串

生成n對括號的所有合法排列 描述 給定乙個非負整數n,生成n對括號的所有合法排列。解答 該問題解的個數就是卡特蘭數,但是現在不是求個數,而是要將所有合法的括號排列列印出來。該問題和 程式設計之美 的買票找零問題一樣,通過買票找零問題我們可以知道,針對乙個長度為2n的合法排列,第1到2n個位置都滿足如...