经典算法——左旋转字符串
一、题目描述
汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!
二、解题思路
经典的三次翻转:
1.先翻转字符串前n个字符;
2.再翻转后面的字符;
3.翻转整个字符串;
比如:输入字符串s="12345abc",n=5;首先翻转前5个字符变成54321abc,然后翻转后面的字符变成54321cba,最后翻转整个字符串变成abc12345
class Solution { public: string LeftRotateString(string str, int n) { if (str.empty() || n>str.length()) return str; char *pData = const_cast<char*>(str.data()); if (str.length() > 0 && n > 0 && n < str.length()) { char* pBegin = pData + 0; char* pEnd = pData + n - 1; char* pBegin2 = pData + n; char* pEnd2 = pData + str.length() - 1; reverse(pBegin, pEnd);//翻转字符串前面n个字符 reverse(pBegin2, pEnd2);//翻转字符串的后面部分 reverse(pBegin, pEnd2);//翻转整个字符串 } return str; } void reverse(char* pBegin, char* pEnd) { if (pBegin == NULL || pEnd == NULL) return; while (pBegin<pEnd) { char temp = *pBegin; *pBegin = *pEnd; *pEnd = temp; pBegin++; pEnd--; } } };
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。