数据结构与算法:翻转字符串(javascript)

184 阅读1分钟
// 翻转字符串

// 【题目】

// 给定一个字符类型的数组chas,请在单词间做逆序调整。只要做到单词的顺序逆序即可,对空格的位置没有特别要求。

// 【举例】

// 如果把chas看作字符串为"dog loves pig",调整成"pig Loves dog"。如果把chas看作字符串为"I’m a student.",调整成"student.a I'm"。

const chas = ["d", "o", "g", " ", "l", "o", "v", "e", "s", " ", "p", "i", "g"];
const change = (arr, start, end) => {
  let tmp = "";
  for (let i = 0; i <= Math.floor((end - start) / 2); i++) {
    tmp = arr[start + i];
    arr[start + i] = arr[end - i];
    arr[end - i] = tmp;
  }
};
const rotate = arr => {
  change(arr, 0, arr.length - 1);
  let index1 = 0;
  for (let i = 0; i < arr.length; i++) {
    if (arr[i] === " ") {
      change(arr, index1, i - 1);
      index1 = i + 1;
    }
  }
  change(arr, index1, arr.length - 1);
};
rotate(chas);
console.log(chas);

// 补充问题:给定一个字符类型的数组chas和一个整数size,请把大小为size的左半区整体移到右半区,右半区整体移到左边。

// 【举例】

// 如果把chas看作字符串为"ABCDE",size=3,调整成"DEABC"。

// 【要求】

// 如果chas长度为N,两道题都要求时间复杂度为O(N),额外空间复杂度为O(1)。
const chas2 = ["A", "B", "C", "D", "E"];
const rotate2 = (arr, size) => {
  change(arr, 0, arr.length - 1);
  change(arr, 0, arr.length - size - 1);
  change(arr, arr.length - size, arr.length - 1);
};
rotate2(chas2, 3);
console.log(chas2);