Java中字符串反转的七种方法
2016-04-13 14:19
309 查看
突然在想,确实是浮躁了
字符串反转的七种方法:
在线代码:
字符串反转的七种方法:
在线代码:
package test1; import java.util.Stack; public class Reverse { //方法一:递归+字符串截取;不断的进行二分截取,递归返回; /* * 【时间复杂度:】渐渐跟下去就是n,n/2,n/4,....n/2^k,其中k就是循环的次数 由于你n/2^k取整后>=1 即令n/2^k=1 可得k=log2n,(是以2为底,n的对数) 所以时间复杂度可以表示O()=O(logn) */ public static String reverse1(String s) { int length = s.length(); if (length <= 1) return s; String left = s.substring(0, length / 2); String right = s.substring(length / 2, length); return reverse1(right) + reverse1(left); } //方法二:字符串拼接 /* * 【时间复杂度:】O()=O(n) */ public static String reverse2(String s) { int length = s.length(); String reverse = ""; for (int i = 0; i < length; i++){ reverse = s.charAt(i) + reverse; } return reverse; } //方法三:字符串拼接同2, /* * 【时间复杂度:】O()=O(n) */ public static String reverse3(String s) { char[] array = s.toCharArray(); String reverse = ""; for (int i = array.length - 1; i >= 0; i--) reverse += array[i]; return reverse; } //方法四:StringBuffer(s).reverse() /* * 【时间复杂度:】O()=O(n) */ public static String reverse4(String s) { return new StringBuffer(s).reverse().toString(); } //方法五:二分交换 /* * 【时间复杂度:】O()=O(n) */ public static String reverse5(String orig) { char[] s = orig.toCharArray(); int n = s.length - 1; int halfLength = n / 2; for (int i = 0; i <= halfLength; i++) { char temp = s[i]; s[i] = s[n - i]; s[n - i] = temp; } return new String(s); } //方法六:异或 /* * 【时间复杂度:】O()=O(n) */ public static String reverse6(String s) { char[] str = s.toCharArray(); int begin = 0; int end = s.length() - 1; while (begin < end) { str[begin] = (char) (str[begin] ^ str[end]); str[end] = (char) (str[begin] ^ str[end]); str[begin] = (char) (str[end] ^ str[begin]); begin++; end--; } return new String(str); } //方法二:辅助空间栈 /* * 【时间复杂度:】O()=O(n) */ public static String reverse7(String s) { char[] str = s.toCharArray(); Stack<Character> stack = new Stack<Character>(); for (int i = 0; i < str.length; i++) stack.push(str[i]); String reversed = ""; for (int i = 0; i < str.length; i++) reversed += stack.pop(); return reversed; } public static void main(String[] args) { System.out.println(reverse2("abcdefg")); } }
相关文章推荐
- Java String类的秘密
- Java基础练习选择题(4)
- 怎样用Java代码来把SSL的证书自己主动导入到Java的秘钥存储文件(keystore)
- 笔记(4/11-4/12) java基础
- java多线程入门学习(二)
- java double类型运算问题
- Java仿12306图片验证码
- Spring和ThreadLocal
- RPC小例子解决Exception in thread "main" java.lang.reflect.UndeclaredThrowableException
- SpringMVC环境搭建
- 项目移植过程中报:“Project facet Java version 1.7 is not supported.” 错误
- Java并发编程:Thread类的使用(详解)
- java 中\b \t \n \f \r \" \
- 现实JAVAEE开发中最常用到的技术和工具
- eclipse hadoop设置报错 9000 failed on connection exception
- 配置hadoop-1.2.1 eclipse开发环境 Run as hadoop
- 启动hadoop NoClassDefFoundError: javax/net/SocketFactory
- hadoop 运行java 清洗数据 报错Failed to set permissions of path: \tmp\...
- java ArrayList的应用
- eclipse 向HDFS中写入文件报错 Permission denied