利用栈的特性
-
遍历每个字符,并且转换大小写,除空格以外。
-
若遍历到空格则把前面遍历的字符视为一个单词,加入栈,并在单词前面拼接一个空格, 这样再出栈拼接单词时就有了空格。
-
出栈拼接单词,返回最后的结果。
代码实现
function trans(s, n){
if (!s || !n) {
return '';
}
const stack = [];
let stackEle = '';
let transformWorld = '';
for (let i = 0; i < n; i++) {
const asciiCode = s.charCodeAt(i);
if(asciiCode >= 65 && asciiCode <= 90) {
transformWorld += s[i].toLowerCase();
} else if(asciiCode >= 97 && asciiCode <= 122){
transformWorld += s[i].toUpperCase();
} else { // 空格
const ele = ' ' + transformWorld
stack.push(ele);
transformWorld = '';
}
}
/*
当循环结束后,转换大小写后的最后一个单词并没有入栈,
是因为循环结束后,transformWorld的值就是第一次出栈的结果。
*/
// 出栈拼接单词
while (stackEle = stack.pop()) {
transformWorld += stackEle;
}
return transformWorld;
}
时间复杂度:O(n)
空间复杂度:O(n)