码迷,mamicode.com
首页 > 其他好文 > 详细

微软之左旋转字符串

时间:2014-07-22 23:02:55      阅读:208      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   os   io   2014   

时间: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;
}


微软之左旋转字符串,码迷,mamicode.com

微软之左旋转字符串

标签:style   blog   color   os   io   2014   

原文地址:http://blog.csdn.net/u012333003/article/details/24735575

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!