字符串或者数组的循环左移或右移(不开辟额外的空间存放中间值)
2016-09-04 16:40
375 查看
对于的这样的问题,我刚开始是有点蒙逼的,感觉不开辟额外的空间怎么实现额。。。后来想起来以前老师有提过不用额外的空间交换两个数据的算法,顿时感觉有思路了。说白了数组的左移就是一个交换的过程,既然能做到不用额外的空间交换数据,那数组的左移也是可以实现的。
先说说不用额外的空间实现两个数据的交换:
先说说不用额外的空间实现两个数据的交换:
int a=10; int b=15; a = a + b; b = a - b; a = a - b;整体的代码如下:
public class LeftRotateString { public static void main(String[] args) { System.out.println(change("abcdefgh".toCharArray(),3)); } public static char[] change(char[] c,int k){ for(int i=0;i<k/2;i++){ /*c[i]^=c[j]^=c[i]^=c[j];*/ int j = k-i-1; c[i]=(char) (c[i]+c[j]); c[j]=(char) (c[i]-c[j]); c[i]=(char) (c[i]-c[j]); } for(int n=0;n<(c.length-k)/2;n++){ int j=c.length-1-n; int i=k+n; c[i]=(char) (c[i]+c[j]); c[j]=(char) (c[i]-c[j]); c[i]=(char) (c[i]-c[j]); } for(int i=0;i<c.length/2;i++){ int j=c.length-1-i; c[i]=(char) (c[i]+c[j]); c[j]=(char) (c[i]-c[j]); c[i]=(char) (c[i]-c[j]); } return c; } }
相关文章推荐
- 给定字符串(ASCII码0-255)数组,请在不开辟额外空间的情况下删除开始和结尾处的空格,并将中间的多个连续的空格合并成一个。例如:" i am a little boy.
- 给定字符串(ASCII码0-255)数组,请在不开辟额外空间的情况下删除开始和结尾处的空格,并将中间的多个连续的空格合并成一个。
- php中循环实现(字符串,对象,或者数组)编码相互转换
- 有一个字符数组的内容为:"student a am i",请你将数组的内容改为"i am a student". 要求: 不能使用库函数。只能开辟有限个空间(空间个数和字符串的长度无关)。
- 有一个字符数组的内容为:"student a am i",请你将数组的内容改为"i am a student". 要求: 不能使用库函数。只能开辟有限个空间(空间个数和字符串的长度无关)。
- 有一个字符数组的内容为:"student a am i",请你将数组的内容改为"i am a student". 要求: 不能使用库函数。只能开辟有限个空间(空间个数和字符串的长度无关)。
- 有一个字符数组的内容为:"student a am i",请你将数组的内容改为"i am a student". 要求: 不能使用库函数。只能开辟有限个空间(空间个数和字符串的长度无关)
- 设计算法并写出代码移除字符串中重复的字符,不能使用额外的缓存空间。注意: 可以使用额外的一个或两个变量,但不允许额外再开一个数组拷贝。
- 有一个字符数组的内容为:"student a am i",请你将数组的内容改为"i am a student". 要求: 不能使用库函数。只能开辟有限个空间(空间个数和字符串的长度无关)。
- 有一个字符数组的内容为:"student a am i",请你将数组的内容改为"i am a student". 要求: 不能使用库函数。只能开辟有限个空间(空间个数和字符串的长度无关)。
- 有一个字符数组的内容为:"student a am i",请你将数组的内容改为"i am a student". 要求: 不能使用库函数。只能开辟有限个空间(空间个数和字符串的长度无关)。 提交
- 有一个字符数组的内容为:"student a am i",请你将数组的内容改为"i am a student". 要求: 不能使用库函数。只能开辟有限个空间(空间个数和字符串的长度无关)。
- 有一个字符数组的内容为:"student a am i",请你将数组的内容改为"i am a student". 要求: 不能使用库函数。只能开辟有限个空间(空间个数和字符串的长度无关)。
- 数组字符串系列之,将矩阵逆时针旋转90度,要求使用最少的额外空间
- java 数组迭代器(或者集合里存放字符串,而不是bean)
- 实现任意找到一个字符或者字符串将整个字符串分割成若干个字符串保存到字符数组当中
- [每天一题]删除字符串中的重复字符(不要使用额外空间)
- 指针与数组的区别,以及指针的空间开辟问题
- 字符串替换(新开辟空间)
- 删除字符串开始及末尾的空白符,并且把数组中间的多个空格(如果有)符转化为1个。