您的位置:首页 > 编程语言 > Java开发

字符串反转

2016-07-28 23:12 453 查看
以前都是使用牛客网的OJ来练习,今天牛客网维护,才想到使用LeetCode,没想到居然还改版了,界面都不一样了。但是最让我眼前一亮的是这样一道简单题:字符串反转

334.Write a function that takes a string as input and returns the string reversed.

Example:

Given s = “hello”, return “olleh”.

Java很容易嘛,不就是字符串反转,那么最多是O(n),将字符串一次取值,并反向拼接。结果:报LTE错误,超时=_=

原来是Java中字符串的拼接使用StringBuffer。代码如下:

public String reverseString(String s) {
int len=s.length();
if(len==0) return "";
StringBuffer str=new StringBuffer();
str.append(s);
str.reverse();
return str.toString();
}


这里总结java中stringBuffer和String、StringBuilder的区别:

String是不可变的,而其他两种是可变的;

String和 StringBuffer是线程安全的,其中StringBuffer对方法加了同步锁或者对调用的方法加了同步锁,所以是线程安全的,而StringBuilder并没有对方法进行加同步锁,所以是非线程安全的

StringBuilder与StringBuffer有公共父类AbstractStringBuilder(抽象类),都会调用AbstractStringBuilder中的公共方法;

如果程序不是多线程的,那么使用StringBuilder效率高于StringBuffer;

此时,字符串连接操作中StringBuffer的效率要明显比String高。String对象是不可变对象,每次操作Sting 都会重新建立新的对象来保存新的值。StringBuffer对象实例化后,只对这一个对象操作。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息