java对字符串进行反转
任务要求:实现字符串的反转,不使用任何系统的方法,且时间复杂度最小。
直接变换法,在这里采用异或实现。原理如下:
a^a=0, a^0=a,且异或操作满足交换律与结合律。若要交换两个变量,则可以采用以下方法实现。
a=a^b;
b=a^b;//b=(a^b)^b=a^(b^b)=a^0=a
a=a^b;//a=a^(a^b)=(a^a)^b=0^b=b
实现代码如下:
package com.ibianma.zifuchuan;
public class ReverseStr {
public static String reverseStr(String str){
char[] ch = str.toCharArray();
for (int i = 0,j=ch.length-1; i <j ; i++,j--) {
ch[i]=(char)(ch[i]^ch[j]);
ch[j]=(char)(ch[i]^ch[j]);
ch[i]=(char)(ch[i]^ch[j]);
}
return new String(ch);
}
public static void main(String[] args) {
String str = "abcde";
String str1 = reverseStr(str);
System.out.println(str1);
}
}
结果如下:
edcba
算法性能分析:
该算法对字符数组遍历一次,时间复杂度为O(N),N为字符串的长度。且无需声明额外的变量。