那个大神帮我用java写个字符串反转,要求时间复杂度最低
解决方案 »
- 多线程yield的问题
- 正则表达式
- lucene 关于IndexReader的open方法 请教
- jtable 删除问题
- 一个JSP的问题。高手请进。不会的帮顶
- 显示的对话框只是标题栏?
- 讨论任何一天是星期几的算法!
- 广州JAVA兄弟看过来,抛弃JAVA拥抱VC,特抛售几本JAVA二手好书,绝对便宜,帮忙UP有分
- java中jTextField中怎么过滤不需要的输入键
- 请问各路高手哪有《JAVA 技术内幕》马朝晖译 机械工业出版社的E-BOOK下载!!!
- 新手编了这一段小代码,但是为什么在输入卡号界面按了返回之后在欢迎界面按继续,就会输出两次cont也就是触发了两次cont事件呢??求解决方法·····
- 求大婶帮我看下这个为什么不是多线程
/**
* 字符串反转
* @return
*/
public static String reverser(String str){
char[] chars = str.toCharArray();
int end = chars.length - 1;
int start = 0;
while(end > start){
char tmp = chars[end];
chars[end] = chars[start];
chars[start] = tmp;
++start;
--end;
}
return new String(chars);
}
char[] chs = str.toCharArray();
char temp;
for(int i = 0; i < chs.length >>> 1; i++){
temp = chs[i];
chs[i] = chs[chs.length - i -1];
chs[chs.length - i - 1] = temp;
}
return new String(chs);
}不谢,时间复杂度为O(n),给分吧
public static String stringReverse(String str){ StringBuffer sb = new StringBuffer(str).reverse(); return sb.toString();}
public char[] toCharArray() {
// Cannot use Arrays.copyOf because of class initialization order issues
char result[] = new char[value.length];
System.arraycopy(value, 0, result, 0, value.length);
return result;
}要求时间复杂度最低的话,下面是一个时间复杂度为O(1)的解决方法:
int i = inputStr.length() - 1;
while(i >= 0)
// 正在使用反转字符串,Sysetm.out.print是一个用例
System.out.print( inputStr.charAt(i--) );
这时间复杂度怎么是O(1)呢。还是O(n)吧。
static String reverse(String str) {
char[] arr = str.toCharArray();
int length = str.length();
for(int i = 0;i < length / 2;++i) {
char temp = arr[i];
arr[i] = arr[length - i - 1];
arr[length - i - 1] = temp;
}
return String.valueOf(arr);
}
public static void main(String[] args) {
String str = "123456ABCD中国";
char[] dist = new char[str.length()];
for(int x = str.length() - 1, p = 0; x >= 0; x--){
dist[p++] = str.charAt(x);
}
System.out.println(new String(dist));
}
public String reverseString(String s,int start, int end)
{
char[] arr = s.toCharArray();
reverse(arr,start,end);
return new String(arr);
}
//反转整个字符串
public String reverseString(String s)
{
return reverseString(s,0,s.length())
}public void reverse(char[] arr,int x,int y)
{
for(int start=x,end=y-1; start<=end; start++,end--)
{
swap(arr,strat,end);
}
}public void swap(char[] arr,int x,int y)
{
char temp=arr[x];
arr[x]=arr[y];
arr[y]=temp;
}