【发布时间】:2011-01-11 09:34:42
【问题描述】:
例如,给定一个 str 为“Stackoverflow is for each one”并删除“aeiou”, 该函数应将 str 转换为“Stckvrflw s fr vry n”。
我有一个 char 字符串数组:str[] 和一个要删除的 char 字符数组:remove[]
我的解决方案:循环 str[] 查找 remove[] 中的每个 in 字符。每次将 str[] 左移一位。我相信更好的破解是可能的。
【问题讨论】:
-
更具体一点。将您正在寻找的时间/空间复杂度添加到您的问题中。如果我们的解决方案适用于短字符串,我会说 O(n^2) 是可以的。
-
无解(A):告诉面试官改用Python和
string.translate(None, "aeiou")。 (B):告诉面试官切换到 Perl 和$string =~ s/[^aeiou]//g。 -
这是我的推理:一些最好的字符串匹配算法是
Theta(n)。你有m这样的模式要检查(特殊情况:模式长度== 1)。所以基本上,您正在查看 Theta(mn) 运行时。 -
@dirkgently:可以在 Theta(m + n) 中完成,请参阅下面的第三个解决方案。
-
@Tarydon:我故意跳过的另一件事是我之前评论中的预处理时间:)
标签: c algorithm data-structures