这道题初看很简单,但是处处都是坑!!!总算在系统规定的运行时间内通过了,松了一口气。

  1. 尽量不要直接 split 空格,不然会有一堆坑,后期很难处理。我的处理方式是,乖乖地遍历一遍原字符串,自己切分。
  2. 频繁进行字符串的拼接,相当耗时!相当耗时!相当耗时!原先我不知道这里有这么个天坑(基础不扎实),想方设法优化代码,乞求能在规定时间内通过,然并卵...后面觉得可能是字符串拼接问题,然后上网一查,果然如此!!!泪目!!!StringBuffer 的拼接效率,真的不知道比 String 的拼接效率高了多少倍,想深刻感受一下的,自己尝试拼接十万次,看哪个快,结果真的很离谱!!!
  3. 最后,就没什么好说的了。事实上,这道题的思路真的不是特别难,我感觉可能就我基础不扎实,才会踩了一堆坑...这篇博客既是给予小白们(我也是)一些建议,也是为自己提个醒。
import java.util.*;

public class Solution {
    public String trans(String s, int n) {
        // write code here
        
        char[] chrs = s.toCharArray();
        StringBuffer stringBuffer = new StringBuffer(n); // 返回最终结果
        StringBuffer tmpStringBuffer = new StringBuffer(); // 存放临时数据
        Stack<String> stack = new Stack<>();
        
        int switchs = s.charAt(0) == ' ' ? 0 : 1; // 0:空格    1:字符
        
        for (char chr : chrs) {
            if (chr == ' ') {
                if (switchs == 1) {
                    switchs = 0;
                    stack.push(new String(tmpStringBuffer));
                    tmpStringBuffer = new StringBuffer();
                }
                tmpStringBuffer.append(" ");
            }
            else {
                if (switchs == 0) {
                    switchs = 1;
                    stack.push(new String(tmpStringBuffer));
                    tmpStringBuffer = new StringBuffer();
                }
                if (chr >= 'A' && chr <= 'Z') {
                    tmpStringBuffer.append((chr + "").toLowerCase());
                }
                else if (chr >= 'a' && chr <= 'z') {
                    tmpStringBuffer.append((chr + "").toUpperCase());
                }
            }
        }
        stack.push(new String(tmpStringBuffer));
        
        while (!stack.isEmpty()) {
            stringBuffer.append(stack.pop());
        }
        
        return new String(stringBuffer);
    }
}