修改字符串的索引

时间:2019-04-06 04:59:29

标签: javascript string

我想知道用于替换字符串中字符的运行时(在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,因此主要是针对面试问题而对此感到好奇

3 个答案:

答案 0 :(得分:0)

您可以使用.replace(“”,“”)函数。

例如:

let str = "hello world"; 
str = str.replace("hello", "this");
console.log(str); // this world

示例代码笔:https://codepen.io/darrow8/pen/VNjyJP

更多信息:https://www.w3schools.com/jsref/jsref_replace.asp

答案 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);