读[编程之法:面试与算法心得](字符处理)
来源:互联网 发布:淘宝运营工资待遇 编辑:程序博客网 时间:2024/05/29 21:37
字符串的旋转:
题目描述
给定一个字符串,要求将字符串前面的若干个字符移到字符串的尾部,例如,将字符串"abcdef"的前3个字符'a' 'b' 'c' 移动到 字符串的尾部,那么原字符串将变成"defabc" ,请写一个函数实现此功能。
分析与解法
解法一:蛮力位移
初看此题,可能最先想到的是将需要移动的字符一个一个地移动带字符串的尾部,
如果定义 指向该字符串的一个指针S,然后设该字符串的长度为n, 那么,可以先编写一个函数,LeftShiftOne(char *s,int n),
来完成将一个字符移动到字符串尾部的功能:
void LeftShiftOne(char *s,int n){ //保存第一个字符 char t=s[0]; for(int i=1;i<n;i++){ s[i-1]=s[i]; } s[n-1]=t; }
然后再调用m次LeftShiftOne函数,使得字符串开头的m个字符移动到字符串的尾部
void leftRotateString(char *s,int n,int m){ while(m--){ LeftShiftOne(s,n); }}
Java实现上述代码
public static String LeftRotateString(String s,int m){ //m要移动的字符个数 char[] chars=s.toCharArray(); for (int j = 0; j < m; j++) { char c=chars[0]; for (int i = 1; i <chars.length; i++) { chars[i-1]=chars[i]; } chars[chars.length-1]=c; } String ss=new String(chars); return ss; }
这样就完成了将若干个字符移到字符串的尾部
下面来分析一下这种方法的时间复杂度和空间复杂度,针对长度为n的字符串来说,假设需要移动M个字符到字符串的尾部,那么总共需要m*n 次操作,同时设立一个变量保存第一个字符,因此,时间复杂度为O(MN) ,空间复杂度为O(1)
0 0
- 读[编程之法:面试与算法心得](字符处理)
- 编程之法-面试和算法心得
- 编程之法:面试和算法心得——互动出版网
- 我的新书《编程之法:面试和算法心得》终于上市 [内含勘误]
- 程序员编程艺术:面试和算法心得
- 程序员编程艺术:面试和算法心得
- 编程之法:面试和算法
- 数字图像处理算法实现------------编程心得(1)
- 数字图像处理算法实现 编程心得
- 《Windows核心编程》读书心得——字符和字符串处理(1)
- 《程序员编程艺术:面试和算法心得》——目录
- 《程序员编程艺术:面试和算法心得》——目录
- 《程序员编程艺术:面试和算法心得》——目录
- 《程序员编程艺术:面试和算法心得》链接
- 编程之美:微软技术面试心得(奋斗的小鸟)_PDF 电子书
- 编程之美——微软技术面试心得
- 《编程之美——微软技术面试心得》
- 编程之美——微软技术面试心得
- 编写Java程序分析字符串中每个单词的个数
- 获取当前路径下的所有文件(子文件)
- [廖雪峰 - Python2.7教程] 返回函数2 - 学习笔记
- ROS .so载入undefined reference to `dlopen'问题
- 容斥原理(模板)
- 读[编程之法:面试与算法心得](字符处理)
- 关于实现了接口BeanPostProcessor 和 接口FactoryBean 的注意事项
- Android获取视频音频的时长的方法
- Tomcat设置默认启动项目
- 递归删除目录
- [java学习笔记]计算器dijkstra two-stack
- java 简述类的封装性、继承性、多态性
- 第四周-项目一-建立单链表
- 《JAVA与模式》之解释器模式