问题描述
我已经使用Java中的推入和弹出操作进行了编码,以反转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 df['new_col'] = ['P' if (x[0].isalpha() and not x.startswith("I0")) else 'C' for x in df.index]
,则您甚至都不需要进行推入操作,而且它只需进行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。但这会使事情变得复杂,因为您将不断检查这一点。