剑指offer---左旋转字符串

题目描述

汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!
第一种解法:

string LeftRotateString(string str, int n){
	if(str.size() == 0){
		return str;
	}
	int size = str.size();
	if(n > size){//若n大于数组的长度,则对数组的长度取余 
		n = n % size;
	}
	string str1(str,0,n);//求出从0开始,长度为n的子串
	string str2(str,n,size-n);
	return str2 + str1;
}

第二种解法:

string ReverseSentence(string str){
	if(str.empty() || str[0] == ' '){//判空和判断只有一个空格
		return str;
	}
	char ch[str.size()];
	strcpy(ch,str.c_str());
	char delims[] = " ";
	char* result = NULL;
	result = strtok(ch,delims);//分割字符串
	string ret = "";
	while(result !=NULL){
		string s(result);
		ret = " " + s + ret;
		result = strtok(NULL,delims);//之后第一个参数为NULL
	}
	ret.erase(0,1);//消除第一个多加的空格
	return ret;
}
发布了102 篇原创文章 · 获赞 21 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/guanripeng/article/details/104662916