2012-10-22 28 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. 陣列加入成一個字符串,使用空間作爲分隔符。