javascript最佳地反转字符串内的子字符串

u4vypkhs  于 2023-02-02  发布在  Java
关注(0)|答案(2)|浏览(145)

我有一个场景,我需要反转字符串中的子字符串。Javascript字符串是不可变的,传统的字符串交换技术在这里不起作用。所以我决定使用string.split('')string.join('')方法来获得解决方案。请检查下面的代码。

function reverseAString(str, startIndex, endIndex) {
  let left = startIndex;
  let right = endIndex;
  let output = str;
  while(left < right) {
    const arr = output.split('');
    let temp = arr[left]
    arr[left] = arr[right]
    arr[right] = temp;
    output = arr.join('');
    left += 1;
    right -= 1;
  }
  return output
}

这和预期的一样。但是有没有更好的方法来反转子串,因为上面的解决方案并不是实现反转的最好方法?

3bygqnnd

3bygqnnd1#

这是你的函数但是要简化。我们可以把调用字符串方法链接到数组方法中。Array.prototype.reverse()用于反转一个数组,Array.prototype.join()用于将数组中的所有元素连接成一个字符串。String.prototype.substring()用于从原始字符串中删除字符串,但是不改变/更改原始字符串。

function reverseASubstring(str, startIndex, endIndex) {
    let reversedStr = str.substring(startIndex, endIndex).split("").reverse().join("");
    return str.substring(0, startIndex) + reversedStr + str.substring(endIndex);
}

console.log(reverseASubstring("Tony is Tony in reverse.", 0, 4));
lf5gs5x2

lf5gs5x22#

此解决方案使用两个捕获组构建正则表达式,一个用于跳过的字符数(例如,起始索引),另一个用于反转的字符数。使用此解决方案,您可以应用单个正则表达式替换,使用.split('').reverse().join('')反转第二个捕获组

function reverseASubstring(str, start, end) {
    let regex = new RegExp('^(.{' + start + '})(.{' + (end - start + 1) + '})');
    return str.replace(regex, (m, c1, c2) => c1 + c2.split('').reverse().join(''));
}

let str = 'Hello world.';
console.log(str, 0, 4, '=>', reverseASubstring(str, 0, 4));
console.log(str, 6, 10, '=>', reverseASubstring(str, 6, 10));

相关问题