【发布时间】:2023-03-05 09:26:01
【问题描述】:
问题是特殊字符的位置(例如:'?'、','、''、'.')应该保持不变。所以对于输入字符串“Hello World,你好吗?”输出将是“你是,你好吗?世界你好?”。现在对于没有特殊字符的字符串,O(n) 算法是将每个单词反转然后反转整个数组,但这并没有考虑特殊字符。
我想出的最佳算法如下。我们遍历数组并将每个单词压入堆栈顶部,然后将特殊字符排入队列。然后,我们同时从堆栈和队列中弹出元素,并将它们组合起来形成所需的输出。
是否有就地 O(n) 算法?如果没有,您能否建议一个没有额外空间的 O(n^2) 算法。还假设,您不能使用任何字符串库函数。
【问题讨论】:
-
正在使用 std::string (仅用于字符串表示)和 std::istream 好吗?
-
你的算法是 O(n)
-
OP 正在寻找合适的算法。