正则表达式时间复杂度O(n)

1.有几千个字符串,要判断每个字符串中是否包含 “Book”,可以有两种方法:

1>字符串处理
   在循环内:
   if( str1.IndexOf("Book") > 0 )
   {
   }

2>正则表达式
   Regex r = new Regex( "Book" );   // 在循环外
   在循环内:
   if( r.IsMatch( str1 ) )
   {
   }

以上那种执行效率会高些?

更进一步,假如问题是:在几千个字符串中找出含有 “Book”和/或 “Expert”但不包含“Result”的字符串,那种方法效率高些?用正则表达式该怎样写?




2.正则表达式时间复杂度

Regex的算法复杂度是固定的O(n),在完成了Regex到有限自动机的转换以后,判断一个字符串是否匹配所需的时间只和该字符串的长度有关,这个字符串里面的每个字符至多会被检查一次。

  String实现的IndexOf采用的是比较笨的办法,某些情况下它可能需要检查一个字符多次,比如匹配abac到ababac的时候。
  所以如果有大量的字符串需要检查,Regex应该要比IndexOf优化。如果有更多的匹配条件,那么Regex的优势就更明显。你的例子“Book”和/或 “Expert”但不包含“Result”,IndexOf要检查字符串3次,但是Regex仍然只要一次(但是“不包含”的Regex写起来不是很容易)。
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,我会详细解释。 1. 字符串处理: 字符串处理是计算机科学中的一个重要领域。在计算机程序中,字符串是一系列字符的序列,它们可以是字母、数字、符号等。处理字符串的算法和数据结构包括字符串匹配、字符串排序、字符串比较、字符串压缩等。常见的字符串处理算法有KMP算法、Boyer-Moore算法、Rabin-Karp算法等。 2. 哈希表: 哈希表是一种常见的数据结构,它可以高效地实现插入、删除和查找操作。哈希表通过哈希函数将元素映射到不同的桶中,然后在桶中进行操作。哈希表的时间复杂度为O(1),因此在许多场合下,哈希表是数据结构的首选。哈希表的实现方式有开放寻址法和链表法两种。 3. 动态规划: 动态规划是一种常用的算法思想,它通常用于解决具有重叠子问题和最优子结构性质的问题。动态规划通常分为自顶向下和自底向上两种方式。自顶向下的动态规划通常使用递归实现,而自底向上的动态规划通常使用迭代实现。动态规划的时间复杂度通常为O(n^2)或O(n^3),因此在处理大数据集时需要谨慎选择算法。 4. 正则表达式正则表达式是一种用于匹配字符串的表达式,通常用于文本搜索和替换。正则表达式的语法通常由元字符、字符集、量词等组成。正则表达式的实现可以使用DFA、NFA等算法,其中DFA是一种高效的实现方式。 5. 贪心算法: 贪心算法是一种基于贪心策略的算法,它通常用于解决最优化问题。贪心算法通常分为两种实现方式:一种是自顶向下的贪心算法,另一种是自底向上的贪心算法。贪心算法的时间复杂度通常为O(nlogn),因此在处理大数据集时需要谨慎选择算法。 6. 搜索算法: 搜索算法是一种广泛应用于人工智能、信息检索、游戏等领域的算法。搜索算法通常分为深度优先搜索、广度优先搜索、启发式搜索等。搜索算法的时间复杂度通常为O(b^d),其中b是分支因子,d是深度。因此在处理大数据集时需要谨慎选择算法。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值