【发布时间】:2011-10-20 14:41:13
【问题描述】:
给你一个字符串。开发一个函数来删除该字符串中的重复字符。字符串可以是任意长度。你的算法必须在太空中。如果您希望可以使用不依赖于字符串大小的恒定大小的额外空间。您的算法必须具有 O(n) 的复杂度。
我的想法是定义一个大小为 26 的整数数组,其中第 0 个索引对应于字母 a,第 25 个索引对应于字母 z,并将所有元素初始化为 0。 因此,我们将遍历整个字符串一次,并在遇到字母时增加所需索引处的值。
然后我们将再次遍历字符串,如果所需索引处的值为 1,我们打印出该字母,否则我们不打印。
这样时间复杂度为 O(n) 并且使用的空间是恒定的,与字符串的长度无关!!
如果有人能提出提高效率的想法,那将非常有帮助!
【问题讨论】:
-
猜这是一个家庭作业:P 任何编程语言限制?或伪代码是好的?例如,如果它是 PHP,您可以附加到一个数组并且大小将是可变的,最多只能使用您旅行过的字符数,并且检查一个字符是否已被检查是一个 in_array 的问题(例如)跨度>
-
我认为假设字符串仅包含
a到z是不公平的。 Unicode 中有超过一百万个代码点。 -
@purefan 这不是一个家庭作业问题,因为您已经看到我已将其标记为面试 qs..
-
@Ray Toal Ya 如果你能想出一个更好的解决方案,它将包含所有代码点,我将不胜感激
-
好的,我试一试,但首先,重复是什么意思?您是指在字符串中的任何位置多次出现的任何字符,还是两次或多次出现相同字符的任何连续运行。后者是 Unix
uniq程序中删除的内容。