演算法題:給定乙個字串,要求把字串前面的若干個字元移動到字串的尾部,如把字串「abcdef」前面的2個字元'a'和'b'移動到字串的尾部,使得原字串變成字串「cdefab」。請寫乙個函式完成此功能,要求對長度為n的字串操作的時間複雜度為 o(n),空間複雜度為 o(1)。
最開始想到的就是將整個陣列前移兩次。符合空間複雜度o(1)。
#includeusing namespace std;
//abccddee
void leftmove(char * chars, int length)
*(chars + length - 1) = temp;
}void revertstring(int begin, int end, char * chars);
int main()
顯然時間複雜度是o(2n),若是前m位移動到字串後面,時間複雜度將是o(m*n)。
網上查到一種通過翻轉的思想來解這道題。眾所周知,一串數字翻轉的翻轉則是它本身。
ab翻轉得:ba。
ccddee翻轉得:eeddcc。
abccddee翻轉得:eeddccba。
顯然我們只需要翻轉一次ab,再翻轉一次ccddee,再翻轉一次abccddee,即可得到正確解。
ab->ba;
ccddee->eeddcc;
baeeddcc->ccddeeab;
就有了下面的**:
void revertstring(int begin, int end, char * chars);
int main()
void revertstring(int begin, int end, char * chars)
}
顯然這種演算法的時間複雜度為o(n),擴充套件下思維,凡是處理類似陣列一部分移到另一處的問題,都可以用這種多次翻轉的思路實現。
JAVA 將字串(或部分字串)反轉
編寫 實現將乙個字串中字元的排列順序進行反轉,頭尾調換。將字串變成你字元陣列。對字元陣列反轉。將字元陣列變成字串。public static void main string args 將字串整體進行反轉 public static string reversestring string str 過...
將字串中的 移到串的前部分
題目 編碼完成處理函式 函式將字串中的字元 移到串的前面,前面的非 字元後移,但不能改變非 字元的先後順序,函式返回串中字元 的數量。舉例 原始串 ab cd e 12,處理後為 abcde12,函式返回值為5。要求 使用盡量少的時間和輔助空間。答 include stdafx.h include ...
字串的移動
某蒟蒻迷上了 小書童 有一天登陸時忘記密碼了 他沒繫結郵箱or手機 於是便把問題拋給了神犇你。蒟蒻雖然忘記密碼,但他還記得密碼是由一串字母組成。且密碼是由一串字母每個向後移動n為形成。z的下乙個字母是a,如此迴圈。他現在找到了移動前的那串字母及n,請你求出密碼。均為小寫 輸入格式 第一行 n。第二行...