博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
编程珠玑--左旋字符串
阅读量:4585 次
发布时间:2019-06-09

本文共 769 字,大约阅读时间需要 2 分钟。

其实编程之美也有类似的题,这道题是编程珠玑第二章的题目。

题目描述:给定一个字符串,将字符串循环移位K次。

最简答的方法就是,通过O(n)的辅助空间,将数组循环移位,时间复杂度就是O(n)

但是如果要求空间复杂度为O(1)呢?

观察规律可知,对前K位反转以及后面的反转,最后对整个字符串反转就能达到O(1)的空间复杂度。

PS:注意处理k>字符串的长度的情况

1 #include 
2 #include
3 4 using namespace std; 5 6 void reverseStr(string &s,int i,int j) 7 { 8 while(i < j) 9 {10 char tmp = s[i];11 s[i] = s[j];12 s[j] = tmp;13 ++i;14 --j;15 }16 }17 18 void leftRotate(string &s,int k)19 {20 int len = s.length();21 k = k%len;22 reverseStr(s,0,k-1);23 reverseStr(s,k,len-1);24 reverseStr(s,0,len-1);25 }26 27 int main()28 {29 string s("abcdefgh");30 leftRotate(s,3);31 cout<
<

 

转载于:https://www.cnblogs.com/cane/p/3779453.html

你可能感兴趣的文章
获取日k数据
查看>>
【LOJ】 #2132. 「NOI2015」荷马史诗
查看>>
策略模式
查看>>
DirectX11 With Windows SDK--11 混合状态
查看>>
BZOJ2982: combination Lucas模板
查看>>
UVa 10723 Cyborg Genes(LCS变种)
查看>>
Jmeter参数化
查看>>
Linux用iso镜像制作本地yum源
查看>>
在SSH项目中Struts2、Spring、Hibernate分别起到什么作用?
查看>>
网络编程协议
查看>>
5.9
查看>>
备份项目实例
查看>>
8天学通MongoDB——第二天 细说增删查改
查看>>
TextBloc研究
查看>>
Engine auto idle help conserve fuel reduce noise
查看>>
MAC下安装pomelo
查看>>
182. Duplicate Emails
查看>>
Redis、Memcache和MongoDB的区别
查看>>
设计模式笔记 ------ 原型模式
查看>>
通过Repeater控件绑定数据,相同数据合并单元格。
查看>>