LeetCode344---Reverse String
开始刷leetcode了,记录做过的题目以及做题过程思路的整理,还会贴出自己认为的别人写的好的代码,会不定期的更新~~~~
Question Content:
Write a function that takes a string as input and returns the string reversed.
Example:
Given s = "hello", return "olleh".
Solution:
第一种解法:最直接,最容易想出的解决办法是直接循环字符串,然后倒序输出,代码如下:
public class Solution { public String reverseString(String s) { String result = ""; for (int i = s.length()-1; i >=0; i--) { result+=s.charAt(i); } return result; } }
提交的时候发现超时了。。。
后来尝试换一种拼接方式,使用StringBuilder,Stringbuffer也是可以的,在不考虑线程安全的情况下,StringBuilder的效率更高;
使用StringBuilder的append方法,代码如下:
public class Solution { public String reverseString(String s) { StringBuilder sbBuilder = new StringBuilder(); for (int i = s.length()-1; i >=0; i--) { sbBuilder.append(s.charAt(i)); } return sbBuilder.toString(); } }
提交成功。
时间复杂度都是o(n),但是使用“+”拼接的速度更慢
第二种解法:考虑减少时间复杂度,定义两个数组下标,依次交换字符串的第一个字符和最后一个字符,再输出新的字符串即可,代码如下:
public class Solution { public String reverseString(String s) { char[] tmparray = s.toCharArray(); int i = 0; int j = tmparray.length-1; char tmp = ' '; while(i<j){ tmp = s.charAt(i); tmparray[i] = tmparray[j]; tmparray[j] = tmp; i++; j--; } return String.valueOf(tmparray); } }
这种解法循环次数减少一半,降低了时间复杂度,相应的会增加空间复杂度。