反转堆栈中的A B C D的最小推入操作次数是多少?

问题描述

我已经使用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。但这会使事情变得复杂,因为您将不断检查这一点。