将堆栈中的 A B C D 反转,最少需要多少次 push 操作?
What is the minimum number of push operation in reversing A B C D in stack?
我在 Javascript
中使用 push 和 pop 操作编码来反转 ABCD 字符串
var count = 0;
function reverse(str) {
let stack = [];
// push letter into stack
for (let i = 0; i < str.length; i++) {
stack.push(str[i]);
count++
}
// pop letter from the stack
let reverseStr = '';
while (stack.length > 0) {
reverseStr += stack.pop();
}
return reverseStr;
}
console.log(reverse("ABCD") + count);
逆向ABCD最小推数是多少?
如果你使用 JS,你甚至不需要推送操作 str.split('').reverse().join('')
顺便说一句,它只需要 3 次推送操作。
推送操作的最小数量等于字符串的长度,因为堆栈遵循后进先出顺序。
最大 数量应为 3 或 4,具体取决于您的操作方式。首先,你应该使用 unshift() 而不是 push() 因为你真的只需要 push 一个字符到数组的 front 。所以:
let count;
function reverse(str) {
count = 0;
let stack = [];
// push letter into stack
for (let i = 0; i < str.length; i++) {
stack.unshift(str[i]);
count++
}
return stack.join("");
}
let stringA = "ABCD";
console.log(stringA + " => " + reverse(stringA) + ": " + count);
但是,正如其他人所建议的那样,您可以 移动 个字母,从最后一个字符之前的字母向后移动,并将它们移动到末尾:
let count;
function reverse2(str) {
count = 0;
let str2 = str.split("");
let sLength = str2.length;
for (let i = (sLength - 2); i >= 0; i--) {
let s = str2.splice(i, 1).toString();
str2.push(s);
count++
}
return str2.join("");
}
let stringB = "ABCD";
console.log(stringB + " => " + reverse2(stringB) + ": " + count);
在这两种情况下,您可以检查匹配的连续字符 - 例如,在 good 中,您有两个 o。但这会使事情复杂化,因为您会不断检查它。
我在 Javascript
中使用 push 和 pop 操作编码来反转 ABCD 字符串var count = 0;
function reverse(str) {
let stack = [];
// push letter into stack
for (let i = 0; i < str.length; i++) {
stack.push(str[i]);
count++
}
// pop letter from the stack
let reverseStr = '';
while (stack.length > 0) {
reverseStr += stack.pop();
}
return reverseStr;
}
console.log(reverse("ABCD") + count);
逆向ABCD最小推数是多少?
如果你使用 JS,你甚至不需要推送操作 str.split('').reverse().join('')
顺便说一句,它只需要 3 次推送操作。
推送操作的最小数量等于字符串的长度,因为堆栈遵循后进先出顺序。
最大 数量应为 3 或 4,具体取决于您的操作方式。首先,你应该使用 unshift() 而不是 push() 因为你真的只需要 push 一个字符到数组的 front 。所以:
let count;
function reverse(str) {
count = 0;
let stack = [];
// push letter into stack
for (let i = 0; i < str.length; i++) {
stack.unshift(str[i]);
count++
}
return stack.join("");
}
let stringA = "ABCD";
console.log(stringA + " => " + reverse(stringA) + ": " + count);
但是,正如其他人所建议的那样,您可以 移动 个字母,从最后一个字符之前的字母向后移动,并将它们移动到末尾:
let count;
function reverse2(str) {
count = 0;
let str2 = str.split("");
let sLength = str2.length;
for (let i = (sLength - 2); i >= 0; i--) {
let s = str2.splice(i, 1).toString();
str2.push(s);
count++
}
return str2.join("");
}
let stringB = "ABCD";
console.log(stringB + " => " + reverse2(stringB) + ": " + count);
在这两种情况下,您可以检查匹配的连续字符 - 例如,在 good 中,您有两个 o。但这会使事情复杂化,因为您会不断检查它。