2012-10-22 27 views
4

如果我有两个字符串说str1 & str2如何使用Stack的push和pop操作组合两个字符串?

str1 = I to cricket chess 

str2 = like play and 

我想要的输出:

“我喜欢打板球和国际象棋”

可以这样使用stackpushpop操作来完成。算法应该独立于编程语言。上面提到的字符串可以是任意长度的 。

回答

2

这是非常简单的。你只需要push第一个字从第一串叠,然后push从第二个字符串的第一个字,然后做第二个字是相同的,然后到第三话等

之后,你需要pop来自堆栈中的每个元素和push它到第二个堆栈,以反转序列。然后你只需pop从第二堆叠中的每个元素,并将其添加到结果字符串。

+0

我会说这是比我更好的解决方案,因为你不必维护两个单独的索引递减,这可能是容易出错。我下注矿是更多的时间和空间高效(无第二堆叠,并且堆叠的没有双重遍历),在是更容易出错的费用。 – Alan

+0

是的,但如果你使用队列,而不是堆栈,可以省略第二阶段。 – Lazin

+1

队列会使这个微不足道。我认为整个想法是测试OP对LIFO性质的理解,同时处理解析句子的FIFO性质(即使它在两个字符串之间分割)。 – Alan

1

从你给什么,你必须做出一些假设。

假设:

  1. 词在句子中的最多一个词两个字符串
  2. 一个字符串会之间交错比其他字符串
  3. 空间不再是词的分隔符。

该算法将如下这样:

  1. 对于每个字符串:
  2. 分割字符串成一个阵列,在空格字符
  3. 找到与最长长度的阵列
  4. 与来自最长长度的阵列开始(称之为arrayB,另一个arrayO)
  5. 从数组的末尾,
  6. 推arrayB的元件压入堆栈,
  7. 推arrayO的元件压入堆栈,
  8. 重复,直到每个阵列中的所有元件被推动时,两个阵列之间交替。
  9. 完成后,弹出栈到一个数组,
  10. 阵列加入成一个字符串,使用空间作为分隔符。