[Algorithm] Reverse array of Chars by word

For example we have:

["p", "r", "e", "f", "e", "t", " ", "m", "a", "k", "e", " ", "p", "r", "a", "t", "i", " c", "e"]

We want to get:

["p", "r", "a", "t", "i", " c", "e", " ", "m", "a", "k", "e", " ", "p", "r", "e", "f", "e", "t"]

 

Requirement:

  You can only do in array swap, you cannot create a new array.

 

The way to do it:

  1. Reverse whole string to get:

["e", " c", "i", "t", "a", "r", "p", " ", "e", "k", "a", "m", " ", "t", "e", "f", "e", "r", "p"]

  2. Then we reverse each word to get final result:

["p", "r", "a", "t", "i", " c", "e", " ", "m", "a", "k", "e", " ", "p", "r", "e", "f", "e", "t"]

 

So the main function should looks like this:

复制代码
let data = [
  "p","r","e","f","e","t"," ",
  "m","a","k","e"," ",
  "p","r","a","t","i","c","e"
];

function main(_data) {
  let data = _data.slice();

  reverseWholeString(data);
  reverseWords(data, 0);

  return data;
}

console.log(main(data));
复制代码

 

The reverseWholeString function would be:

复制代码
function reverseWholeString(data) {
  let start = 0,
    end = data.length - 1;
  reverseChars(data, start, end);
}

function reverseChars(data, start, end) {
  while (start < end) {
    [data[start], data[end]] = [data[end], data[start]];
    start++;
    end--;
  }
}
复制代码

 

reverseWords function would be:

复制代码
function reverseWords(data, start) {
  let index = findEmptyIndex(data, start);
  let end = index - 1;

  while (index !== -1) {
    reverseChars(data, start, end);
    start = index + 1;
    index = findEmptyIndex(data, start);
    end = index - 1;
  }

  reverseChars(data, start, data.length - 1);
}

function findEmptyIndex(data, start) {
  let index;
  for (let i = start; i < data.length; i++) {
    if (data[i] === " ") {
      index = i;
      break;
    } else {
      index = -1;
    }
  }

  return index;
}
复制代码

 

------------

Full code:

  

posted @   Zhentiw  阅读(149)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具
历史上的今天:
2018-02-15 [Tools] Using mobile device for debugging your mobile web site
2018-02-15 [Tools] Create your own mobile emulator device by using Chrome dev tool
2017-02-15 [Ramda] Refactor to Point Free Functions with Ramda using compose and converge
2017-02-15 [React Native] Writing Platform-Specific Components for iOS and Android in React Native
2016-02-15 [Regular Expressions] Find a String that Precedes Another String ?= , ?!
2016-02-15 [Regular Expressions] Find Groups of Characters, and ?:
点击右上角即可分享
微信分享提示