读[编程之法:面试与算法心得](字符处理)
2016-09-22 10:32
218 查看
字符串的旋转:
题目描述
给定一个字符串,要求将字符串前面的若干个字符移到字符串的尾部,例如,将字符串"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)
相关文章推荐
- 程序员编程艺术:面试和算法心得
- 技术笔试-编程之法(算法面试心得)
- 《程序员编程艺术:面试和算法心得》链接
- 《程序员编程艺术:面试和算法心得》——目录
- [面试编程题]算法基础-字符移位
- 《程序员编程艺术:面试和算法心得》——目录
- 编程之法-面试和算法心得 - 笔记
- 数字图像处理算法实现------------编程心得(1)
- 程序员编程艺术:面试和算法心得
- 《程序员编程艺术:面试和算法心得》——目录
- windows编程中字符和字符串的处理
- 微软面试、经典算法、编程艺术、红黑树4大系列总结
- 程序员编程艺术第一~十章集锦与总结--面试、算法、编程
- 微软等数据结构+算法面试100题(6)--写一个函数,检查字符是否是整数,如果是,返回其整数值
- 编程珠玑(二):字符反转--杂耍算法
- 微软面试、经典算法、编程艺术、红黑树4大系列总结
- vc串口编程使用mscomm控件的,接受字符个数多余8个时,会重复进中断的OnCommMscomm()的处理对策
- Delphi编程--字符处理
- shell 编程中的特殊字符的处理
- 微软面试、经典算法、编程艺术、红黑树4大系列总结