【问题标题】:Pseudo-code to check if an array is a palindrome检查数组是否为回文的伪代码
【发布时间】:2018-05-02 13:02:47
【问题描述】:

我正在尝试编写一个算法/伪代码来检查给定的数组 A 是否是使用堆栈的回文。

【问题讨论】:

  • 你尝试过什么吗?
  • 您为什么要限制自己使用堆栈数据类型?对我来说听起来像家庭作业一样可疑。数组已经可以随机访问了,为什么还要使用额外的数据结构?
  • 用笔和纸尝试一个小例子。您将如何手动完成?
  • @MrSmith42 我在一张纸上试过,也知道编码。写算法是另一回事......
  • @MrSmith42 我做了一个原始的把戏......字面意思是手绘一个数组和堆栈并应用 FILO......得到了伪代码......问题是我们应该使用相同的字典正如演讲幻灯片中使用的那样(那是折磨)......再次感谢 - 我想,我应该通过:)

标签: arrays algorithm stack palindrome


【解决方案1】:

我们的方法是: - 将数组 a [left….right] 的元素“推送”到新创建的堆栈上,这样左边的元素首先被推送。因此,数组元素被反转,使得数组的最后一个元素位于堆栈的顶部。

  • 之后,我们将 Stack 中的每个元素“弹出”到新创建的数组 b 中。这意味着原始数组 a 的最后一个元素成为新数组 b 的第一个元素。

  • 最后,我们比较 a 和 b 的每个元素,如果相等,则原始数组 a 是回文数组

算法步骤:

  1. 做一个空栈S

  2. 将 l 设置为左​​侧,将 r 设置为右侧(数组 a)

  3. 对于数组 a [l…r] 中的每个元素,重复: 3.1。将元素添加到栈顶S

  4. 创建一个新的空数组 b 使得 b [left…..right]

  5. 当堆栈 S 不为空时,重复: 5.1 将S顶部的每个元素移除到数组b中

  6. 对于数组 a 和 b,将 l 设置为左​​侧,将 r 设置为右侧。 6.1 如果a[左……右]≠b[左……右];以回答 false 结束 6.2 否则 a [左…右] = b [左…..右];

  7. 以回答 isPalindrome 结束。

呼!!!!

【讨论】:

  • 我认为这不是您的教授想要的;使用额外的数组是作弊。有一种方法可以通过只读取输入数组一次来做到这一点;你能看出来吗?
  • @ruakh 我不知道你指出的方法......请详细说明。
  • 我知道你还没有意识到这一点。挑战在于找到它。 :-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-10
  • 2015-09-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多