提问人:Ziv Glazer 提问时间:10/10/2018 最后编辑:Nina ScholzZiv Glazer 更新时间:10/10/2018 访问量:50
如何在简单数组上实现空间修剪
How to implement space trimming on a simple array
问:
这更像是一个伪代码问题。 假设我们有一个 char 数组,其中每个值都是字母或空格。我们需要实现的是一种算法,它将任何空间序列替换为单个空间。
例:
数组:
['a', 'b', ' ', ' ', ' ', 'b', 'c', ' ']
应变为:
['a', 'b', ' ', 'b', 'c', ' ']
此算法应仅修改给定数组,而不应在临时数组或类似内容中使用。更改数组的唯一方法是按索引设置项目(不能使用任何花哨的数组函数,例如,只能使用 )。O(n) 中有解吗?arr.remove(0, 2)
arr[i] = b
任何回答限制的伪代码或真正的编程语言解决方案都是好的。
答:
0赞
Eugene Tsakh
10/10/2018
#1
为此,您可以在字符串上使用 replace by regexp;
arr.join('').replace(/\s+/g, ' ').split('')
评论
0赞
Ziv Glazer
10/14/2018
此答案不符合问题的要求
1赞
Nina Scholz
10/10/2018
#2
除了用于迭代数组的普通索引之外,还可以使用另一个索引,用于保留最后一个有效字符的最后一个新索引。如果最后一个索引处实际上没有空格或没有空格可用,则值将发生偏移,最后一个索引将增加。i
l
在数组内部增加索引。i
最后,将数组的长度调整为 。l
i l 0 1 2 3 4 5 6 7 -- -- ----------------------- a b _ _ _ b c _ 0 0 a 1 1 a b 2 2 a b _ 3 2 a b _ 4 2 a b _ 5 3 a b _ b 6 4 a b _ b c 7 5 a b _ b c _
var array = ['a', 'b', ' ', ' ', ' ', 'b', 'c', ' '],
i = 0,
l = 0;
while (i < array.length) {
if (array[i] !== ' ' || array[l - 1] !== ' ') {
array[l] = array[i];
l++;
}
i++;
}
array.length = l;
console.log(array);
评论