利用栈的特性

  1. 遍历每个字符,并且转换大小写,除空格以外。

  2. 若遍历到空格则把前面遍历的字符视为一个单词,加入栈,并在单词前面拼接一个空格, 这样再出栈拼接单词时就有了空格。

  3. 出栈拼接单词,返回最后的结果。

代码实现

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)