[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, ); return data;
} console.log(main(data));
The reverseWholeString function would be:
function reverseWholeString(data) {
let start = ,
end = data.length - ;
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 - ; while (index !== -) {
reverseChars(data, start, end);
start = index + ;
index = findEmptyIndex(data, start);
end = index - ;
} reverseChars(data, start, data.length - );
} function findEmptyIndex(data, start) {
let index;
for (let i = start; i < data.length; i++) {
if (data[i] === " ") {
index = i;
break;
} else {
index = -;
}
} return index;
}
------------
Full code:
let data = [
"p",
"r",
"e",
"f",
"e",
"t",
" ",
"m",
"a",
"k",
"e",
" ",
"p",
"r",
"a",
"t",
"i",
" c",
"e"
]; 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--;
}
} 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;
}
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 main(_data) {
let data = _data.slice(); reverseWholeString(data);
reverseWords(data, 0); return data;
} console.log(main(data));
[Algorithm] Reverse array of Chars by word的更多相关文章
- [Algorithm] Reverse a linked list
It helps to understands how recursive calls works. function Node(val) { return { val, next: null }; ...
- [Algorithm] Chunk Array
// --- Directions// Given an array and chunk size, divide the array into many subarrays// where each ...
- Reverse array
数组颠倒算法 #include <iostream> #include <iterator> using namespace std; void reverse(int* A, ...
- reverse array java
/* package whatever; // don't place package name! */ import java.util.*; import java.lang.*; import ...
- CUDA学习,使用shared memory实现Reverse Array
- java.lang.String
1.String 是一个类,广泛应用于 Java 程序中,相当于一系列的字符串.在 Java 语言中 strings are objects.创建一个 strings 最直接的方式是 String g ...
- Java基础教程(20)--数字和字符串
一.数字 在用到数字时,大多数情况下我们都会使用基本数据类型.例如: int i = 500; float gpa = 3.65f; byte mask = 0xff; 然而,有时候我们既需要 ...
- [Swift]LeetCode557. 反转字符串中的单词 III | Reverse Words in a String III
Given a string, you need to reverse the order of characters in each word within a sentence while sti ...
- JavaScript Array 常用函数整理
按字母顺序整理 索引 Array.prototype.concat() Array.prototype.filter() Array.prototype.indexOf() Array.prototy ...
随机推荐
- 又见Python<2>:如何安装第三方库(Windows)
使用python进行数据分析或者数据处理时,往往需要使用一些库,而使用库之前必须安装它.Anaconda内置了很多常用的第三方库,可以满足绝大部分需求,比如numpy.pandas.matplotli ...
- 【SDOI2017】树点染色【线段树+LCT】
本来只是想练练LCT,没想到是个线段树 对于操作1:诶新的颜色?这不是access吗? 也就是说,我们用一棵splay来表示一种颜色 操作2直接在LCT上乱搞-- 不对啊,操作3要查子树 诶好像是静态 ...
- 最封闭的开源系统,话说Android的八宗罪
最封闭的开源系统,话说Android的八宗罪 http://www.ifanr.com/9833 Android 分裂的多面性 http://tech.cncms.com/shouji/android ...
- [COGS2426][HZOI 2016]几何
[COGS2426][HZOI 2016]几何 题目大意: 给定平面坐标系内\(n\)个整点,求这些整点能构成的正多边形的边数的最大值. 思路: 一个基本结论:平面直角坐标系内能够形成的正多边形一定是 ...
- [NC13B]贝伦卡斯泰露/[51Nod1400]序列分解
[NC13B]贝伦卡斯泰露/[51Nod1400]序列分解 题目大意: 给定\(A_{1\sim n}(n\le40)\),问是否能将\(A\)分解成两个相同的子序列? 思路: 折半搜索.时间复杂度\ ...
- DP练习 巡逻
国庆这天五一大道上人头攒动,这是因为大家都准备从五一广场上那个大屏幕观看新中国60周年的国庆阅兵式!这虽然是一件很喜庆的事情,可却让CS市的警察局长伤透了脑筋的,因为人潮拥挤是很容易发生安全事故的. ...
- 2015 UESTC 数据结构专题D题 秋实大哥与战争 变化版本的线段树,合并区间,单点查询
D - 秋实大哥与战争 Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/contest/show/59 D ...
- [译]Java 程序员应该了解的 10 个面向对象设计原则
面向对象设计原则是OOPS(Object-Oriented Programming System,面向对象的程序设计系统)编程的核心,但大多数Java程序员追逐像Singleton.Decorator ...
- mysql group by 组内排序
有数据表 comments------------------------------------------------| id | newsID | comment | theTime |---- ...
- Struts2 学习笔记 09 访问Web元素
我们想要访问Map类型request,session,application.真实类型HttpServletRequest,HttpSession,ServletContext的引用,并对它们进行操作 ...