为什么我的代码不能很好地替换字符串字符?
Why does my code not work out well replacing strings characters?
练习:
本练习的目标是将字符串转换为新字符串,其中新字符串中的每个字符为“(”(如果该字符在原始字符串中仅出现一次)或“)”(如果该字符在原始字符串中出现多次)细绳。判断字符是否重复时忽略大小写。
例子
“喧嚣”=>“(((“
“后退”=>“()()()”
“成功”=>“)())())”
"(( @" => "))(("
我的代码是这样的:
function duplicateEncode(word) {
let str = "";
for (let i = 0; i < word.length; i++) { //This iteration is to examine every character in the string;
for (let j = 0; j < word.length; j++) { //This iteration is to compare every character to every other inside the string, in order to check if there is any repetition
if (j === i) { //This first conditon was selected because a character is not supposed to be compared to itself
continue;
} else if (word[i] === word[j]) {
str = str + ")";
break;
} else if (j !== word.length - 1) {
continue;
} else if (j === word.length - 1) {
str = str + "(";
}
}
}
return str;
}
有谁能帮我弄清楚为什么它不适用于所有情况?
例如:
console.log(duplicateEncode("abc"));
它应该 return ((( 而不是 ((
但是,
console.log(duplicateEncode("mulherm"));
return 正是它应该做的:)((((()
显然,只要一个字符串没有重复的字符,函数 return 就是一个没有第一个元素的字符串。但是,只要字符串至少有一个元素重复它,return 就完全符合预期。
我的代码怎么了?
我认为问题是当您使用下面的代码片段时,您阻止了自己进入最后一个循环。
if (j === i) {
continue;
}
只要最后一个字母不重复的单词就会出现此问题。即
这个有效
console.log(duplicateEncode("aba")); //returns )()
这不
console.log(duplicateEncode("aab")); //returns ))
你可以做的是添加一个声明当
i === word.length - 1
没有
"("
在你的
str
变量,您可以将另一个 ")"
添加到您的 str.
换句话说,如果在遍历整个单词时检查最后一个位置后没有发现重复字符,那么最后一个也保证是唯一的。
以下控制台日志
function duplicateEncode(word) {
let str = "";
for (let i = 0; i < word.length; i++) { //This iteration is to examine every character in the string;
for (let j = 0; j < word.length; j++) { //This iteration is to compare every character to every other inside the string, in order to check if there is any repetition
console.log(i);
console.log(j);
console.log(str);
if (j === i) { //This first conditon was selected because a character is not supposed to be compared to itself
console.log("continue")
continue;
} else if (word[i] === word[j]) {
console.log("append )")
str = str + ")";
break;
} else if (j !== word.length - 1) {
console.log("j !== length")
continue;
} else if (j === word.length - 1) {
console.log("append (")
str = str + "(";
}
}
}
return str;
}
使用调试器逐行调试代码。在某些情况下,内部循环在没有满足向字符串添加字符的条件之一的情况下完成。
相反,使用布尔标志来表示字母是否重复,在循环内设置它(更简单的逻辑),然后在循环后执行 str += (found ? ')' : '(');
。这确保您在外循环的每次迭代中恰好向输出字符串添加一个字符。
练习: 本练习的目标是将字符串转换为新字符串,其中新字符串中的每个字符为“(”(如果该字符在原始字符串中仅出现一次)或“)”(如果该字符在原始字符串中出现多次)细绳。判断字符是否重复时忽略大小写。
例子 “喧嚣”=>“(((“
“后退”=>“()()()”
“成功”=>“)())())”
"(( @" => "))(("
我的代码是这样的:
function duplicateEncode(word) {
let str = "";
for (let i = 0; i < word.length; i++) { //This iteration is to examine every character in the string;
for (let j = 0; j < word.length; j++) { //This iteration is to compare every character to every other inside the string, in order to check if there is any repetition
if (j === i) { //This first conditon was selected because a character is not supposed to be compared to itself
continue;
} else if (word[i] === word[j]) {
str = str + ")";
break;
} else if (j !== word.length - 1) {
continue;
} else if (j === word.length - 1) {
str = str + "(";
}
}
}
return str;
}
有谁能帮我弄清楚为什么它不适用于所有情况?
例如:
console.log(duplicateEncode("abc"));
它应该 return ((( 而不是 ((
但是,
console.log(duplicateEncode("mulherm"));
return 正是它应该做的:)((((()
显然,只要一个字符串没有重复的字符,函数 return 就是一个没有第一个元素的字符串。但是,只要字符串至少有一个元素重复它,return 就完全符合预期。
我的代码怎么了?
我认为问题是当您使用下面的代码片段时,您阻止了自己进入最后一个循环。
if (j === i) {
continue;
}
只要最后一个字母不重复的单词就会出现此问题。即
这个有效
console.log(duplicateEncode("aba")); //returns )()
这不
console.log(duplicateEncode("aab")); //returns ))
你可以做的是添加一个声明当
i === word.length - 1
没有
"("
在你的
str
变量,您可以将另一个 ")"
添加到您的 str.
换句话说,如果在遍历整个单词时检查最后一个位置后没有发现重复字符,那么最后一个也保证是唯一的。
以下控制台日志
function duplicateEncode(word) {
let str = "";
for (let i = 0; i < word.length; i++) { //This iteration is to examine every character in the string;
for (let j = 0; j < word.length; j++) { //This iteration is to compare every character to every other inside the string, in order to check if there is any repetition
console.log(i);
console.log(j);
console.log(str);
if (j === i) { //This first conditon was selected because a character is not supposed to be compared to itself
console.log("continue")
continue;
} else if (word[i] === word[j]) {
console.log("append )")
str = str + ")";
break;
} else if (j !== word.length - 1) {
console.log("j !== length")
continue;
} else if (j === word.length - 1) {
console.log("append (")
str = str + "(";
}
}
}
return str;
}
使用调试器逐行调试代码。在某些情况下,内部循环在没有满足向字符串添加字符的条件之一的情况下完成。
相反,使用布尔标志来表示字母是否重复,在循环内设置它(更简单的逻辑),然后在循环后执行 str += (found ? ')' : '(');
。这确保您在外循环的每次迭代中恰好向输出字符串添加一个字符。