問題,給你乙個字串,要求迴圈左移n位。比如對"abcdefg"迴圈左移2位,我們要得到"cdefgab"。附加條件,不能使用連續輔助空間(包括動態分配),只能使用若干單個變數(即o(1)空間)。
首先,我們知道,反轉乙個字串操作("abcd"變"dcba"),是不需要額外陣列輔助的,只要頭尾資料交換就可以了。然而,可能你不知道,僅僅使用字串反轉可以實現字串迴圈移位:(核心思想三次反轉)
public class string02
/*** 反轉字串,把from字串反轉過來(很常見牢記)
* 字串求長度用length(),陣列求長度用length
* @param from
* @return
*/public static string rechange(string from)
return string.valueof(froms);
} public static void main(string args)
}
迴圈左移n位,首先將原字串進行反轉,然後把整個字串分成 原字串的長度-n和後n個字元並分別進行反轉,最後合併兩個字串即可。(先整體(z)反轉,再部分反轉,最後合併)
迴圈右移n位,首先把原字串分成 原字串的長度-n和後n個字元並分別進行反轉,然後合併兩個字串再次進行反轉即可。(先部分反轉,合併後再整體反轉)
字串的兩部分:first和second分清楚即可。
字串迴圈移位
把字串移動n位。可以乙個乙個移動,這樣的話,要移動n次,每次移動len個。演算法時間複雜度為o n len 也可以開闢乙個新的記憶體,把移動的最終位置計算出來,直接放到那裡即可,這樣時間負責度為o 1 空間複雜度為o len 除此之外,還有時間負責度為o 1 空間負責度也為o 1 的演算法。第一種方...
字串迴圈移位
首先,先看看如何對數字進行迴圈移位 c語言中沒有提供迴圈移位的操作符,但可以通過簡潔的方式實現迴圈移位,主要使用移位操作來實現。設乙個運算元x有s位則迴圈左移n位的操作為 x n x s n 同理右移n位位 x n x s n 實際程式設計中可以用巨集定義實現迴圈移位 define rotate l...
字串迴圈移位
問題描述 給定乙個字串,把字串前k個字元移動到尾部。例 字串 abcdefg 左移3為變成 defgabc 解決思路 引入矩陣中 a b ba的思想 a 為a的轉置矩陣 比如 abc cba,defg gfed,cbagfed defgabc。這樣的演算法時間複雜度是o n 空間複雜度是o 1 如下...