左旋轉字串

來源:互聯網
上載者:User

一、問題描述

定義字串的左旋轉操作:把字串前面的若干個字元移動到字串的尾部。
如把字串abcdef左旋轉2位得到字串cdefab。
請實現字串左旋轉的函數,要求對長度為n的字串操作的時間複雜度為O(n),空間複雜度為O(1)


二、演算法分析

實現此函數的功能並不複雜,複雜之處在於對函數在時間和空間上提出的要求。看到別人提出了一種很好的演算法,能夠在時間和空間上滿足要求,演算法流程圖如下:先反轉前r個字元,再反轉後n-r個字元,最後反轉整個數組。這樣既實現了功能,又在時空上都滿足了限制。

演算法流程圖

三、代碼實現

/*Description:array_len means the array's length, this function can swap the numbers from array[begin] to array[end]output:void此函數實現了反轉給定數組array[array_len]中從array[begin]到array[end]中的元素的功能,要求輸入滿足:0<=begin<=end<array_len */void swap_array(int array[], int array_len, int begin, int end){    int i = 0;    int temp = 0;    int sum = 0;    int len = 0;        sum = begin + end;    len = end - begin + 1;    if(begin < 0 || end >= array_len || begin > end)    {        printf("error: wrong value of begin or end !\n");        exit(1);    }    if(begin == end) //only one value, and it's not necessary to change, it's ok    {        return ;    }    for(i = begin; i < begin + len / 2; i ++)    {        temp = array[i];        array[i] = array[sum -i];        array[sum -i] = temp;    }}void left_circle_r_position(int array[], int array_len, int r){if(array_len < 0 || r < 0 || r > array_len){printf("wrong parameter !\n");exit(1);}if(r == array_len || r == 0) //it's already ok{return ;}swap_array(array, array_len, 0, r-1);swap_array(array, array_len, r, array_len);swap_array(array, array_len, 0, array_len);}void display_array(int array[], int array_len){int i = 0;for(i = 0; i < array_len; i ++){printf("%3d",array[i]);}printf("\n");}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.