面試或者筆試經常被問到字串旋轉,很多面試官還會問原理,下面我們就研究一下字串的旋轉面試或者筆試經常被問到字串旋轉,很多面試官還會問原理,下面我們就研究一下字串的旋轉
試題給定乙個字串,要求把字串前面的若干個字元移動到字串的尾部,如把字串「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個位置都滿足如...