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);
    }
}

这种解法循环次数减少一半,降低了时间复杂度,相应的会增加空间复杂度。

原文地址:https://www.cnblogs.com/miaowu1314/p/6132934.html