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