我想知道用于替换字符串中字符的运行时(在javascript中)。
例如
let str = "hello world";
str[0] = "n";
console.log(str); // hello world
在严格模式下,这将引发错误,因为您无法修改字符串(只读)。
您如何在js中实现O(1)时间,O(1)空间算法以进行str[index] = char
?在C语言中,这很简单,因为访问权限为O(1),您可以修改该元素,而不必分配新的数组并复制值。
我已经找到了使用split来执行此操作的解决方案...但这不是过分杀伤力吗?这意味着O(n)的时间和空间。
由于我使用javascript,因此主要是针对面试问题而对此感到好奇
答案 0 :(得分:0)
您可以使用.replace(“”,“”)函数。
例如:
let str = "hello world";
str = str.replace("hello", "this");
console.log(str); // this world
答案 1 :(得分:0)
在JavaScript
中,字符串是不可变的,因此,您最好的做法是使用所需的更改创建一个新字符串(因此,忘记O(1)
),我认为现在最好的方法是使用string.replace()的替换功能:
const replaceAt = (str, idx, char) =>
{
return str.replace(/./g, (match, offset) => offset === idx ? char : match);
}
console.log(replaceAt("Hello", 1, "3"));
或者,用String.slice():
const replaceAt = (str, idx, char) =>
{
return str.slice(0, idx) + char + str.slice(idx + 1);
}
console.log(replaceAt("Hello", 1, "3"));
答案 2 :(得分:0)
您可以使用substring
:
"use strict";
const replaceCharAt = (s, c, i) => i ? (i != 1 ? c + s.substring(i + 1) : s[0] + c + s.substring(3)) : c + s.substring(i);
let str = "hello world";
str = replaceCharAt(str, "n", 0);
str = replaceCharAt(str, "3", 1);
console.log(str);