剑指offer-翻转单词顺序

Posted by franki on May 22, 2021

和为s的连续正数序列

输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串”I am a student. “,则输出”student. a am I”。

示例

输入: "the sky is blue"
输出: "blue is sky the"

思路

方案一: 使用js自带的api

方案二: 递归求解

代码

// 方案一代码:
var reverseWords = function(s) {
    s = s.trim();
    return s.split(" ").filter(item => item).reverse().join(" ");
};

// 方案二代码:
function reverseWords(str) {
    const result = recursive(str.trim());
    const arr = result.split(" ").filter(item => item);
    let all = "";
    for (let item of arr) {
        const isLast = arr.indexOf(item) === arr.length - 1;
        all += recursive(item) + (isLast ? "" : " ");
    }
    return all;
}

function recursive(str, res = "") {
    const length = str.length;
    if (length === 0) {
        return res;
    }
    const s = str.slice(length-1);
    res += s;
    return recursive(str.slice(0, length-1), res);
}

复杂度分析:

方案一:

  • 时间复杂度: O(N)
  • 空间复杂度:O(N)

方案二:

  • 时间复杂度: O(N^2)
  • 空间复杂度:O(N)