您的位置:首页 > 其它

字符串反转之——手摇算法

2015-07-31 10:05 204 查看
手摇算法(也叫三次反转算法)

看题:将字符串abcdefg,变成efgabcd,要求空间复杂度O(1)。

解答:

第一步:将子串abcd反转,变成dcba。源字符串变成dcbaefg
第二步:将字串efg反转,变成gfe。源字符串变成dcbagfe
第三步:将整个字符串dcbagfe反转,变成efgabcd。

手摇算法常常被用来旋转字符串。同时,手摇算法也可以用来做原地归并排序,实现空间O(1).

核心代码:

void shiftBlocks(int arr[], int start, int pos, int end)
{
reverse(arr,start,pos-1);
reverse(arr,pos,end);
reverse(arr,start,end);
}

void reverse(int arr[], int start, int end)
{
for(int i=start, j=end; i<j; i++,j--)
{
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: