《剑指Offer——58:左旋转字符串》代码

Posted 穿迷彩服的鲨鱼

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《剑指Offer——58:左旋转字符串》代码相关的知识,希望对你有一定的参考价值。


前言

//==================================================================
// 《剑指Offer——58(二):左旋转字符串》代码
// 题目:字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。
// 请定义一个函数实现字符串左旋转操作的功能。比如输入字符串"abcdefg"和数
// 字2,该函数将返回左旋转2位得到的结果"cdefgab"。
//==================================================================


一、示例

示例 1:

输入: s = “abcdefg”, k = 2
输出: “cdefgab”
示例 2:

输入: s = “lrloseumgh”, k = 6
输出: “umghlrlose”

二、代码解析

1.新建.cpp文件

代码如下(示例):

//==================================================================
// 《剑指Offer——58(二):左旋转字符串》代码
// 题目:字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。
// 请定义一个函数实现字符串左旋转操作的功能。比如输入字符串"abcdefg"和数
// 字2,该函数将返回左旋转2位得到的结果"cdefgab"。
//==================================================================


#include<iostream>
using namespace std;

/*解法一*/
string reverseLeftWords1(string s, int n)
{
	string preStr = "";
	string nextStr = "";
	nextStr = s.substr(0, n);
	preStr = s.substr(n, s.length() - 1);
	return preStr + nextStr;
}
/*解法二*/
string reverseLeftWords2(string s, int n)
{
	string preStr = "";
	string nextStr = "";
	for (int i = 0; i < s.length(); i++)
	{
		if (i < n)
		{
			nextStr += s[i];
		}
		else
		{
			preStr += s[i];
		}
	}
	return preStr + nextStr;
}
/*法三*/
void Reverse(char* pBegin, char* pEnd)
{
	if (pBegin == nullptr || pEnd == nullptr)
	{
		return;
	}
	while (pBegin < pEnd)
	{
		char temp = *pBegin;
		*pBegin = *pEnd;
		*pEnd = temp;
		pBegin++, pEnd--;
	}
}

char* LeftRotateString(char* pStr, int n)
{
	if (pStr != nullptr)
	{
		int nLength = static_cast<int>(strlen(pStr));
		if (nLength > 0 && n > 0 && n < nLength)
		{
			char* pFirstStart = pStr;
			char* pFirstEnd = pStr + n - 1;
			char* pSecondStart = pStr + n;
			char* pSecondEnd = pStr + nLength - 1;

			// 翻转字符串的前面n个字符
			Reverse(pFirstStart, pFirstEnd);
			// 翻转字符串的后面部分
			Reverse(pSecondStart, pSecondEnd);
			// 翻转整个字符串
			Reverse(pFirstStart, pSecondEnd);
		}
	}

	return pStr;
}


int main()
{
	/*测试代码*/
	cout << "解法一" << endl;
	cout <<"qwertyuioip--->"<< reverseLeftWords1("qwertyuioip", 3) << endl;

	cout << "解法二" << endl;
	cout <<"qwertyuioip--->"<< reverseLeftWords2("qwertyuioip", 3) << endl;

	char arr[] = "qwertyuioip";
	cout << "解法三" << endl;
	cout <<"qwertyuioip--->"<< LeftRotateString(arr, 3) << endl;
	return 0;
}

2.测试

以上是关于《剑指Offer——58:左旋转字符串》代码的主要内容,如果未能解决你的问题,请参考以下文章

剑指 Offer 58 - II. 左旋转字符串

LeetCode(剑指 Offer)- 58 - II. 左旋转字符串

LeetCode(剑指 Offer)- 58 - II. 左旋转字符串

代码随想录算法训练营第8天 | ● 344.反转字符串 ● 541. 反转字符串II ● 剑指Offer 05.替换空格 ● 151.翻转字符串里的单词 ● 剑指Offer58-II.左旋转字符串

Leetcode剑指 Offer 58 - II. 左旋转字符串(简单模拟)

剑指 Offer 58 - II. 左旋转字符串