【发布时间】:2018-12-11 08:51:24
【问题描述】:
IsUnique:实现一个算法来确定一个字符串是否具有所有唯一字符。
在我的一个版本中,我正在使用 RegExp。谁能给我解释一下这个算法的时间复杂度是多少?为什么?
const isUniqueV2 = function isUniqueV2(str) {
const cleanStr = str.toLowerCase().replace(/[^a-z0-9]/g, '');
const strlen = cleanStr.length;
if(!strlen) return false;
const reg = new RegExp(/(.)[^\1]*?\1/g);
if(reg.test(cleanStr)) return false;
return true;
}
RegExp 的时间复杂度因实现而异。我有一个 O(N) 的版本。我只是想知道这个会比使用字典 O(N) 的表现更好吗?
【问题讨论】:
-
这个问题似乎根本没有包括任何解决问题的尝试。 StackOverflow 期待您 try to solve your own problem first,因为您的尝试有助于我们更好地了解您想要什么。请编辑问题以显示您尝试过的内容,并使用Minimal, Complete, and Verifiable example 显示您遇到的特定障碍。欲了解更多信息,请参阅How to Ask。
-
无论你在做什么都是 o[1],你不会循环任何元素,但我不确定 RegExp 是如何工作的,它必须做一些循环,但我确定如果 n 是 str 的长度,它的效率不应超过 o[n]
-
@OmarMneimneh 即使该模式需要引擎迭代每个字符的次数与字符串的长度成正比?最坏的情况,它需要
0.5 * L^2步骤左右的东西 -
@Andreas 我已经解决了这个问题是 4 个版本。我对其余解决方案的时间复杂性有一个清晰的认识,但是在这个版本中,我使用了 Regex,我感到困惑。我不知道如何计算 RegExp 的时间复杂度。
-
我很确定它是线性的。我们有
toLowerCase(),它是O(n),我们有replace(),它是O(n),还有test(),它也是O(n)。我没有看到任何 O(n^2)...
标签: javascript regex performance time-complexity