题目主要信息

1、将一个字符串str内容颠倒并输出

2、输入的字符串可以有空格。

这题相对是比较简单的,直接看方法吧。

方法一:暴力法

具体做法

直接倒叙遍历字符串并存入ArrayList中,在遍历一次,存入到最终结果字符串中。

例如I am a student

存入ArrayList中,变成->[t, n, e, d, u, t, s, , a, , m, a, , I]

结果字符串result = "",然后遍历ArrayList进行result+=ArrayList.get(i);

举例:19880,操作如下。

alt

Java代码

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        String s = bf.readLine();
        //第一次遍历字符串 存入temp中
        ArrayList<Character> temp = new ArrayList<>();
        for (int i=s.length()-1;i>=0;i--){
            temp.add(s.charAt(i));
        }
        String result = "";//最终的结果
        for (Character character : temp) {
            result += character;
        }
        System.out.println(result);
    }
}

复杂度分析

  • 时间复杂度:O(n)O(n),需要遍历字符串两次
  • 空间复杂度:O(n)O(n),一个临时的ArrayList。

方法二:使用StringBuilder或者StringBuffer

具体做法

这里可以直接使用Java中的库函数StringBuilder或者StringBuffer,直接对原字符串进行reverse操作即可。

Java代码

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        String s = bf.readLine();
        StringBuilder sb = new StringBuilder(s);
        System.out.println(sb.reverse().toString());
    }
}

复杂度分析

  • 时间复杂度:O(n)O(n),大家可以去阅读源码,发现也是遍历了一次。
  • 空间复杂度:O(1)O(1),临时变量StringBuilder。