题目描述:写出一个程序,接受一个字符串,然后输出该字符串反转后的字符串。(字符串长度不超过1000)
题目其实很简单,就是反转字符串,这类题目是很常见的。

方法一:双指针
使用双指针,一个指针i指向字符串的起点,另外一个指针j指向字符串的最末端,两者指向的位置的字符进行交换,然后两个指针往中间移动。
图片说明
代码:

public String solve (String str) {
        // write code here
        char[] chars = str.toCharArray();
        //定义两个指针,一个指向最前面,一个指向最末端
        int i = 0;
        int j = str.length()-1;
        while(i < j){
            // 对两个指针指向的位置的字符进行交换
            char tmp = chars[i];
            chars[i] = chars[j];
            chars[j] = tmp;
            // 两个指针往中间移动
            i++;
            j--;
        }
        return new String(chars);
    }

复杂度分析:
时间复杂度:。需要遍历图片说明 的次数。
空间复杂度:。用到了数组进行存储, 为字符串的长度。

方法二:反向输出
将原来的字符串反向遍历,然后利用一个的空间进行接收,最后得到的即为反转后的形式。
代码:

public String solve (String str) {
        // write code here
        // 用StringBuffer进行接收str的反向遍历的字符
        StringBuffer sb = new StringBuffer();
        for(int i = str.length()-1; i >= 0; i--){
            sb.append(str.charAt(i));
        }
        return sb.toString();
    }

复杂度分析:
时间复杂度:。需要遍历 次。
空间复杂度:。用到了数组进行存储, 为字符串的长度。

方法三:直接使用StringBuffer的reverse()方法实现反转

public String solve (String str) {
        // write code here
        StringBuffer sb = new StringBuffer(str);
        return sb.reverse().toString();
    }

复杂度分析:
时间复杂度:函数底层的遍历次数
空间复杂度:。用到了数组进行存储, 为字符串的长度。