Javascript 我无法理解这个涉及简单for循环的基本算法?
考虑一个字符串,它的第一个字母总是Javascript 我无法理解这个涉及简单for循环的基本算法?,javascript,arrays,string,algorithm,for-loop,Javascript,Arrays,String,Algorithm,For Loop,考虑一个字符串,它的第一个字母总是“M”,其他字符几乎可以是“I”s和“U”s的任意组合(不允许使用其他字母,只允许是和我们)。例如:MIU,MUI,MIUIU,muiiuu,muiiuiii,miuiuui都是这类字符串 我想要一个函数,该函数给定任何这样的字符串作为输入,返回一个数组,其中包含所有可能的方式,如果模式“III”出现在输入字符串中,则可以在输入字符串中替换为“U”。例如,在“MIIII”中有两种方法可以用“U”替换“III”,即MUI和MIU。因此,函数应在给定MIIII作为输
“M”
,其他字符几乎可以是“I”s
和“U”s
的任意组合(不允许使用其他字母,只允许是和我们
)。例如:MIU
,MUI
,MIUIU
,muiiuu
,muiiuiii
,miuiuui
都是这类字符串
我想要一个函数,该函数给定任何这样的字符串作为输入,返回一个数组,其中包含所有可能的方式,如果模式“III”
出现在输入字符串中,则可以在输入字符串中替换为“U”
。例如,在“MIIII”
中有两种方法可以用“U”
替换“III”
,即MUI
和MIU
。因此,函数应在给定MIIII
作为输入时返回[MUI,MIU]
这是我的(有缺陷的)功能。其背后的思想是在输入字符串中循环(即MIstring
),寻找“III”
。每次发现“III”
时,都会将雾化
添加到IIIoptions
数组中,但将“U”
替换为“III”
函数规则三(){
变量IIIoptions=[];
对于(变量i=0;i
给定输入MIIII
,我希望函数返回[MUI,MIU]
。但是,它返回[MUI,MUI]
。我尝试了不同的输入,它显示了相同的问题,即数组中的所有项都是相同的。例如,给定字符串miiiiiu
它给我[muiuiiu,muiuiiu,muiuiiu,muiiiiu]
而不是[muiuiiu,miuuiiu,miiiiiu]
。因此,该函数获取MIstring right中包含的“III”s
的数量,但它不会返回我期望它返回的数组
我的函数有什么问题?主要问题是您正在使用,并且该方法始终会用您调用它的方式将III
的第一个匹配序列替换为U
。当找到匹配项时,您可以使用生成带有替换项的新字符串,如下所示:
const input=“miiii”;
功能规则三(str)
{
变量IIIoptions=[];
对于(变量i=0;i
.as控制台{背景色:黑色!重要;颜色:石灰;}
.作为控制台包装{最大高度:100%!重要;顶部:0;}
这是因为您的.replace
始终替换第一个III
——无论实际位置如何。您需要的是结果。按(位置前的切片+位置后的U+切片)
而不是replace
。或者,如果您不需要使用for()
循环,请使用reduce()
并避免代码的副作用。谢谢大家的回答!
function ruleThree() {
var IIIoptions = [];
for (var i = 0; i < MIstring.length; i++) {
if (MIstring.slice(i, i+3) === "III") {
IIIoptions.push(MIstring.replace(MIstring.slice(i, i+3), "U"));
}
}
return IIIoptions;
}