字符串旋转

/*
问题描述:数组 A={a,b,c,d,e}数组A从位置i旋转,例如i=3,旋转后的A为 A={d,e,a,b,c}
来源:网易算法课
日期:2017-10-12
说明:
提供了4个方法:
方法1、2是传统方法,通过对元素的逐次移位完成,时间复杂度较高
方法3、4时间复杂度都为O(n)

*/

#include <iostream>
#include <string>

using namespace std;
//方法1
void stringRotation1(string &str, int i)
{
	char temp;
	int j;
	int rotationTimes = str.length() - 1 - i;
	
	while (rotationTimes > 0)
	{
		temp = str[str.length() - 1];
		j = str.length() - 1;
		for (; j > 0; j--)
			str[j] = str[j - 1];
		str[0] = temp;

		rotationTimes--;
	}
	
}
//方法2:方法1是每一次把全部元素都移动,方法2每次只移动i元素前的元素
void stringRotation2(string &str, int i)
{
	char temp;
	int j, k = 0;
	i++;
	while (i < str.length())
	{

		temp = str[i];

		for (j = i; j > k; j--)
			str[j] = str[j - 1];

		str[k] = temp;
		i++;
		k++;
	}

}

//方法3,理论上可以推导,但代码暂时没有想法,后期补充


//方法4:先将整个数组倒转,分别对由i分割的两个字符串进行倒转,方法非常巧妙 
void stringReverse(string &str, int begin, int end)
{
	char temp;
	while (end > begin)
	{
		temp = str[begin];
		str[begin] = str[end];
		str[end] = temp;

		begin++;
		end--;
	}
}
void stringRotation4(string &str, int i)
{
	stringReverse(str, 0, str.length() - 1);	//将整个字符串翻转
	stringReverse(str, 0, str.length() - i - 1);//将0-(i-1)翻转
	stringReverse(str, str.length() - i, str.length() - 1);	//将i-(length()-1)翻转
	
}

int main()
{
	cout << 3 % 2 << endl;
	string str = "abcdefghijklm";
	int i = 11;
	//stringRotation1(str, i);
	//stringRotation2(str, i);
	//stringRotation4(str, i);

	cout << str << endl;
	return 0;
}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值