字符串处理------旋转
2016-04-23 17:29
260 查看
知识梳理—-字符串
一.字符串的旋转
字符串的旋转在形式上如同将一个字符串像位操作那样进行循环左移或者右移。常见的方法是使用暴力进行,即每次记录最左边的字符S并将其余字符向左移动一位,然后将S放在最右边的位置。将此过程循环进行N次,即可实现字符串前N为的旋转。
暴力法代码:
(时间复杂度O(mn), 空间复杂度O(1))
另外一种比较好的方法是——三步反转,其具体步骤是:
将原始字符串分为待旋转部分X和不变部分Y;
分别反转两个部分并从新合并为一个字符串;
将合并后的字符串反转;
eg: 旋转前三个字符
“abcdef” —> “abc” && “def” —> “cba” && “fed” —>”cbafed” —> “defabc”
三步反转:
(时间复杂度O(n), 空间复杂度O(1)).
一.字符串的旋转
字符串的旋转在形式上如同将一个字符串像位操作那样进行循环左移或者右移。常见的方法是使用暴力进行,即每次记录最左边的字符S并将其余字符向左移动一位,然后将S放在最右边的位置。将此过程循环进行N次,即可实现字符串前N为的旋转。
暴力法代码:
(时间复杂度O(mn), 空间复杂度O(1))
#include <iostream> #include <string.h> using namespace std; void leftRotateString(char *str, int m, int n); //实现长度为m的字符串前n为的旋转 void leftShiftOne(char *str, int m); //实现最左边一个字符的旋转 int main() { char *str = new char[10]; memcpy(str, "abcdef", 6); cout << "Before rotate: " << str << endl; leftRotateString(str, m, n); cout << "After rotate: " << str << endl; return 0; } void leftShiftOne(char *str, int m) { char ch = str[0]; for(int i = 1; i < m; i++) { str[i - 1] = s[i]; } str[m - 1] = ch; } void leftRotateString(char *str, int m, int n) { for(int i = 0; i < n; i++) { leftShiftOne(str, m); } }
另外一种比较好的方法是——三步反转,其具体步骤是:
将原始字符串分为待旋转部分X和不变部分Y;
分别反转两个部分并从新合并为一个字符串;
将合并后的字符串反转;
eg: 旋转前三个字符
“abcdef” —> “abc” && “def” —> “cba” && “fed” —>”cbafed” —> “defabc”
三步反转:
(时间复杂度O(n), 空间复杂度O(1)).
#include <iostream> #include <string.h> using namespace std; void reverseString(char *str, int from, int to); void leftRotateString(char *str, int m, int n); int main() { char *str = new char[10]; memcpy(str, "abcdef", 6); cout << "Before rotate: " << str << endl; leftRotateString(str, m, n); cout << "After rotate: " << str << endl; return 0; } void reverseString(char *str, int from, int to) { while(from < to) { char ch = str[from]; str[from] = str[to]; str[to] = ch; from++; to--: } } void leftRotateString(char *str, int m, int n) { n %= m; //若旋转位数n大于字符长度m,则取余 reverseString(str, 0, n - 1); reverseString(str, n, m - 1); reverseString(str, 0, m - 1); }
相关文章推荐
- BAT批处理中的字符串处理详解(字符串截取)
- Lua函数与字符串处理简明总结
- asp.net 常用字符串处理方法
- Oracle 存储过程总结 二、字符串处理相关函数
- 学习php笔记 字符串处理
- PHP字符串处理的10个简单方法
- PHP5 字符串处理函数大全
- Perl 字符串处理备忘录
- 从Discuz里拿出来的PHP字符串加密函数
- 收藏几个支持中文的PHP字符串截取函数
- php字符串截取问题
- php字符串截取中文截取2,单字节截取模式
- PHP字符串 ==比较运算符的副作用
- PHP字符串处理的10个简单方法
- 第4章 数据处理-php字符串的处理-郑阿奇(续)
- 几个有用的php字符串过滤,转换函数代码
- php字符串分割函数explode的实例代码
- PHP字符串的编码问题的详细介绍
- 基于PHP字符串的比较函数strcmp()与strcasecmp()的使用详解
- 探讨各种PHP字符串函数的总结分析