编程珠玑——字符串移位

来源:互联网 发布:闲鱼如何申请淘宝介入 编辑:程序博客网 时间:2024/06/06 00:25

1.题目描述

讲一个n圆一维向量向左旋转i个位置。例如,当n=8且i=3时,向量abcdefgh旋转为defghabc。现在要求在O(n)的时间复杂度,且空间复杂度为O(1)。

2.算法

2.1字符串逆序解决

例如:当n=8且i=3时,向量为abcdefgh。先旋转前3个字符得到cbadefgh,再转换后5个字符得到cbahgfed,最后旋转整个字符串得到defghabc。

//翻转字符串str的start到end的地方string reverse(string str, int begin, int end){int e = (begin + end) / 2;                        //求出最后一个交换的位置for (int i = begin; i <= e; ++i){swap(str[i], str[end + begin - i]);       //这里注意与i交换的元素为end+begin-i,即i+(end+begin-i) = begin+end}return str;}//字符串移位string shift(string str, int length, int x){str = reverse(str, 0, x - 1);                //逆序前一部分str = reverse(str, x, length - 1);           //逆序后一部分str = reverse(str, 0, length - 1);           //逆序整个字符串return str;}


1 0
原创粉丝点击