定義字串的左旋轉操作:把字串前面的若干個(k個)字元移動到字串的尾部。
如把字串abcdef左旋轉2位得到字串cdefab。
請實現字串左旋轉的函式,要求對長度為n的字串操作的時間複雜度為o(n),空間複雜度為o(1)。
如果採用每次將陣列中的元素移動一位,迴圈k次的方法,則時間複雜度為o(k * n),只需要額外的乙個儲存空間。但是這是不合時間複雜度要求的。
另外需要注意的是k不一定會小於n,所以需要取k = k % n。
但是這還是不能實現線性複雜度,程式設計之美上通過右移字串提出了乙個三次翻轉的演算法。
可以看到不管是左移還是右移,其結果都是兩段子串交換了位置。
如123abcd這個串,左移三位得到abcd123,實際上是123和abcd交換了位置。
首先,將123翻轉成逆序:321abcd
然後,將abcd翻轉成逆序:321dcba
最後,將整個串再翻轉一遍:abcd123(得到左移結果)。
通常情況的描述:
1.根據要移動的位數把字串劃分成兩段:xy;
2.翻轉x子段;
3.翻轉y子段;
4.將得到的結果整個翻轉。
#include #include因為沒找到online judge,所以自己設計的測試用例:using
namespace
std;
void reversestring(string &str)
//cout
int main(int argc, char*argv)
return0;
}
輸入:
1234567abdcd 3
123 6
abcd 25
1234567 0
g 10
輸出:
the final result is: 4567abdcd123
the final result is: 123
the final result is: bcda
the final result is: 1234567
the final result is: g
程式設計師程式設計藝術第一~二十七章集錦與總結
程式設計師程式設計藝術第一章 左旋轉字串
搜尋到的實現:
程式設計師程式設計藝術總結
第一章 左旋轉字串 第二章 字串是否包含及匹配 查詢 轉換 拷貝問題 第三章 尋找最小的k個數 第三章續 top k演算法問題的實現 第三章再續 快速選擇select演算法的深入分析與實現 第三章三續 求陣列中給定下標區間內的第k小 大 元素 第四章 現場編寫類似strstr strcpy strp...
程式設計師程式設計藝術 回文判斷
鳴謝 感謝 july,您的部落格給予我很大的幫助,增強了我學習的動力。希望分享的力量永傳!本文問題源於 july的文章,修正了 july關於回文 的bug,現將本人 發布如下 如發現有問題,還希望不吝賜教。謝謝。include include using namespace std int max ...
程式設計師程式設計藝術第一 十章集錦與總結
程式設計師程式設計藝術第一 十章集錦與總結 面試 演算法 程式設計 紅黑樹系列,及十三個經典演算法研究系列相比,程式設計藝術系列的作者已經不止我乙個人,而是乙個工作室了,它的名字叫做程式設計藝術室。程式設計藝術系列最初名為程式設計師面試題狂想曲,即為面試服務,後來隨著加入與我一起創作的人越來越多,我...