字符串的左旋转

原创 2015年07月07日 09:40:10

题目:定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部。如把字符串 abcdef 左旋转 2 位得到字符串 cdefab。请实现字符串左旋转的函数。要求时间对长度为 n 的字符串操作的复杂度 为 O(n),辅助内存为 O(1)。


#include<iostream>
#include<string.h>
#include<assert.h>
using namespace std;

void reverse_str(char *le, char *ri)
{
	assert(le);
	assert(ri);

	while (le < ri)
	{
		char tmp = *le;
		*le = *ri;
		*ri = tmp;

		le++;
		ri--;
	}
}

void reverse(char *str,int n)
{
	int len = strlen(str);
	char *start = str;
	char *end = str + len - 1;

	reverse_str(start,start+n-1);
	reverse_str(start+n,end);
	reverse_str(start,end);
}

int main()
{
	char p[] = "abcdef";
	reverse(p, 2);
	printf("%s\n", p);
	return 0;
}


相关文章推荐

剑指offer面试题[42]-反转单词顺序VS左旋转字符串

题目1: 汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”ab...

微软面试100题之26题:左旋转字符串

题目: 定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部。 如把字符串abcdef 左旋转2 位得到字符串cdefab。请实现字符串左旋转的函数。 要求时间对长度为n 的字符串...

程序员面试题精选100题(21)-左旋转字符串

http://zhedahht.blog.163.com/blog/static/2541117420073993725873/ 题目:定义字符串的左旋转操作:把字符串前面的若干个字符移动到...
  • ZCSYLJ
  • ZCSYLJ
  • 2011年09月28日 20:34
  • 513

翻转单词顺序 VS 左旋转字符串43

题目一(翻转单词顺序):输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串”I am a student.”则输出”student....

剑指offer——左旋转字符串

题目描述:汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abc...

程序员编程艺术1:左旋转字符串

程序员编程艺术系列(简称TAOPP系列),围绕“面试”、“算法”、“编程”三个主题,注重提高广大初学者的编程能力,以及如何运用编程技巧和高效的算法解决实际应用问题。感谢“研究者July“分享的博客,这...

剑指offer之面试题42翻转单词顺序VS左旋转字符串

翻转单词顺序VS左旋转字符串
  • WSYW126
  • WSYW126
  • 2016年05月12日 18:22
  • 301

(1)左旋转字符串

/* * 左旋转字符串: * abcdef,左旋转2,得到cdefab * ------------------------- * void LeftRotate(char* arr, int...

面试算法(四十二)翻转单词顺序VS左旋转字符串

1、题目:输入一个英文句子,翻转句子中单词的顺序

第一章:左旋转字符串

#include #include #include #include #include using namespace std; //第一种方法,官方提供,代码比较简单 templat...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:字符串的左旋转
举报原因:
原因补充:

(最多只允许输入30个字)