微软之左旋转字符串

时间:2014.04.29

地点:基地二楼

----------------------------------------------------------------------------------------------

一、题目

定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部。
如把字符串abcdef左旋转2位得到字符串cdefab。

-------------------------------------------------------------

二、思路

假设有 abcdef12345,我们想将abcdef放置12345通过左旋转放置abcdef后面

即形成 12345abcdef

我们分析:现在数子字符在前面了,字母字符在后面了,这相当于将原字符串数字部分和字母部分对换了一下

我们知道,如果分别将数字字符部分和字母字符部分逆序可形成:

fedcba和54321

我们将上面从后面往前面度,也就是说如果在将这两部分结合起来逆序就是

12345abcdef

于是归纳起来就是要写一个字符串逆转函数,先将前部分逆转,再将后部分逆转,在整体逆转

时间复杂度为O(n)

-------------------------------------------------------------

三、源码实现

#include<iostream>
using namespace std;
void Reverce(char arr[], size_t left, size_t right)
{
	char temp;
	for (;left < right;++left,--right)
	{
		temp = arr[left];
		arr[left] = arr[right];
		arr[right] = temp;
	}
}
void LeftRotationString(char arr[], size_t size, size_t count)
{
	Reverce(arr, 0, count - 1);
	Reverce(arr, count, size - 1);
	Reverce(arr, 0, size - 1);
}
int main()
{
	char arr[] = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h' };
	LeftRotationString(arr, 8, 3);
	for (auto e : arr)
		cout << static_cast<char>(e) << endl;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值