数据结构与算法面试题80道(26)
2016-03-13 16:42
267 查看
6.左旋转字符串
题目:
定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部。
如把字符串abcdef左旋转2位得到字符串cdefab。请实现字符串左旋转的函数。
要求时间对长度为n的字符串操作的复杂度为O(n),辅助内存为O(1)。
将abcdefg的前三个左旋。先abcdefg->defabcg->defgbca(时间为n-3)
将问题转换为将bca的前一个左旋。先bca->acb(时间为1)
将问题转换为将cb的前一个左旋。cb->bc(时间为1)
所有时间复杂度为0(n).
所有的问题都是字母两两交换,辅助内存为O(1).
题目:
定义字符串的左旋转操作:把字符串前面的若干个字符移动到字符串的尾部。
如把字符串abcdef左旋转2位得到字符串cdefab。请实现字符串左旋转的函数。
要求时间对长度为n的字符串操作的复杂度为O(n),辅助内存为O(1)。
将abcdefg的前三个左旋。先abcdefg->defabcg->defgbca(时间为n-3)
将问题转换为将bca的前一个左旋。先bca->acb(时间为1)
将问题转换为将cb的前一个左旋。cb->bc(时间为1)
所有时间复杂度为0(n).
所有的问题都是字母两两交换,辅助内存为O(1).
#include<iostream> #include<cstring> using namespace std; char str[]="abcdefghij"; void leftRotateString(int left,int right,int n){ int temp=right-left; for(int i=left+n;i<right;i++){ char c=str[i]; str[i]=str[i-n]; str[i-n]=c; } //输出看看结果 for(int i=0;i<right;i++) cout<<str[i];cout<<endl; if(temp%n==0) return ; else{ left=right-n; n=n-temp%n; leftRotateString(left,right,n); } } int main(){ int n=7; leftRotateString(0,strlen(str),n); return 0; }
相关文章推荐
- 【PHP笔记】 zend常用数据结构及宏
- 树的定义
- 数据结构----串
- hdu 1255(线段树求重叠面积)
- Opencv Mat数据结构学习
- java核心数据结构总结
- 数据结构笔记-----栈
- 数据结构与算法面试题80道(25)
- 数据结构与算法面试题80道(24)
- 数据结构与算法面试题80道(23)
- 数据结构与算法面试题80道(22)
- 数据结构与算法面试题80道(21)
- 单链表的模板类实现
- 数据结构(3)线性表之顺序表C++实现
- MySQL索引背后的数据结构及算法
- C语言数据结构:单向链表
- 数据结构二叉树知识点总结
- 《数据结构与算法分析C++描述(第3版)》第三章List容器可编译运行版
- 数据结构与算法学习(一)
- 数据结构课设