【发布时间】:2016-11-30 19:19:44
【问题描述】:
我写了如下一个java,通过使用正则表达式在Strings中查找重复的String。现在我试着找出它的复杂性,如果有人知道它的复杂性,请告诉我。
String s = "ABCABCAAAABBBBCCAAABCGABCABC";
Pattern pattern = Pattern.compile("(?:([ABC])(?!\\1)([ABC])\\1\\2)+");
Matcher matcher = pattern.matcher(s);
while (matcher.find()) {
System.out.print("FOUND");
}
【问题讨论】:
-
我不知道为什么这被标记为“征求建议”,但似乎 OP 并没有为解决问题做太多工作。
-
你需要了解 matcher.find() 是如何工作的。它如何搜索字符串以及何时停止。
-
我大胆猜测一下,说它等于 matcher.find() 的复杂度
-
你在那里的表达式看起来像它试图匹配一个序列中最多 5 个字符,
+在那上面,意思是一个或多个。这可能会搜索整个字符串。但是它只需要一个匹配,所以第一个匹配就足够了。所以我认为它只会扫描字符串一次或两次,这取决于,所以时间复杂度大致等于目标字符串s中的字符数。
标签: java regex time time-complexity big-o