Javascript 在大小为k的交替块中反转字符串

Javascript 在大小为k的交替块中反转字符串,javascript,string,Javascript,String,给定一个字符串和一个整数k,对于从字符串开始计算的长度为2k个字符的每一段,需要反转前k个字符。如果剩下的字符少于k个,请将所有字符反转。如果少于2k但大于或等于k个字符,则将前k个字符反转,将另一个字符保留为原始字符 范例 Input:s=“abcdefg”,k=2 输出:“bacdfeg” 在上面的示例中,两个“ab”的第一个块被反转为“ba”,两个“ef”的第三个块被反转为“fe” 这是我的方法: var reverseStr=函数(s,k){ for(设i=0;i[…g1].reve

给定一个字符串和一个整数k,对于从字符串开始计算的长度为2k个字符的每一段,需要反转前k个字符。如果剩下的字符少于k个,请将所有字符反转。如果少于2k但大于或等于k个字符,则将前k个字符反转,将另一个字符保留为原始字符

范例

Input:s=“abcdefg”,k=2
输出:“bacdfeg”
在上面的示例中,两个
“ab”
的第一个块被反转为
“ba”
,两个
“ef”
的第三个块被反转为
“fe”

这是我的方法:

var reverseStr=函数(s,k){
for(设i=0;iconsole.log(reverseStr(“abcdefg”,2))
一个选项是使用正则表达式匹配最多
k
个字符,后跟最多
2k
个字符-然后使用替换函数仅反转初始
k
个字符:

var reverseStr=函数(s,k){
constpattern=newregexp(`(.{1,${k}})(.{0,${k}})`,'g');
返回s.replace(pattern,(u,g1,g2)=>[…g1].reverse().join('')+g2;
};

log(reverseStr(“abcdefg”,2))
以大小为k的块反转字符串

//make a variable string with some letters to test.
let str = "abcdefg"; 

//k represents is the number of letters to reverse starting at 0 to position k
let k = 4;  

//select the first k letters and split on blankstring, converting to a list 
//then reversing that list, collapsing it to a string with join, then 
//re-append the original string at position k to the end. 
result = (str.substring(0,k).split('')).reverse().join('') + str.substring(k); 
console.log({result}); 
印刷品:

{ result: 'dcbaefg' } 

JavaScript中的字符串是不可变的,您不能指定它们的索引来就地修改字符串。您需要构建一个新字符串并返回它

每个2k组需要一个循环。提取该子字符串,反转第一个
k
字符,然后将它们连接到结果

功能反转(s,k){
让结果=”;
对于(设i=0;iconsole.log(reverseStr(“12345678”,2))您可以通过三个步骤来实现它。首先将字符串分成
k
组。然后在偶数索引处反转每个组的字符串。最后把所有的人都聚在一起

功能反转(s,k){
返回s
.replace(新的RegExp('\\w{'+k+'}',g'),$2=>$2+'|')
.split(“|”)
.map((项目,i)=>
i%2!==0
?项目
:项目
.拆分(“”)
.reverse()
.加入(“”)
)
.加入(“”);
}

日志(reverseStr('abcdefg',2))参见
输入
输出
。我需要
反转
字符串,直到
k
@ggorlen将字符串“拆分”为k个字符的块,并反转每个偶数块中的字符。这是从leetcode开始的…以偶数索引反转每个组的字符串。请注意,从性能角度看,这比常规
substr()
切片大约慢50%()
用法。只有代码的答案几乎总是可以通过添加一些关于它们如何工作以及为什么工作的解释来改进的。