正規表示式時間複雜度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寫起來不是很容易)。
相關文章
- 時間複雜度O(n)和空間複雜度時間複雜度
- 時間複雜度O(1)、O(n)、O(n²)、O(nlogn)的含義時間複雜度
- 時間複雜度為 O (n^2) 的排序演算法時間複雜度排序演算法
- 時間複雜度為 O(n^2) 的排序演算法時間複雜度排序演算法
- Javascript校驗密碼複雜度的正規表示式JavaScript密碼複雜度
- Java實現:排序演算法--時間複雜度為O(n² )Java排序演算法時間複雜度
- 正規表示式 {n,}
- 時間戳和正規表示式時間戳
- Leetcode 234. 迴文連結串列 快慢指標+連結串列逆序實現O(n)時間複雜度且O(1)空間複雜度LeetCode指標時間複雜度
- JS常用正規表示式及驗證時間的正規表示式JS
- 時間複雜度跟空間複雜度時間複雜度
- 時間複雜度與空間複雜度時間複雜度
- 時間複雜度和空間複雜度時間複雜度
- 正規表示式 \n 元字元字元
- 判斷連結串列是否為迴文結構,空間負責度為O(1),時間複雜度為O(n)時間複雜度
- 正規表示式複習
- 匹配指定長度不重複字母正規表示式
- 匹配n位正整數正規表示式
- 時間複雜度為 O(nlogn) 的排序演算法時間複雜度排序演算法
- 時間複雜度為O(nlogn)的排序演算法時間複雜度排序演算法
- 快速排序平均時間複雜度O(nlogn)的推導排序時間複雜度
- 時間複雜度怎麼算?如何計算時間複雜度?時間複雜度
- 隨機列印0-100的全部數字並且不可重複,時間複雜度為O(n)隨機時間複雜度
- 校驗十二小時制時間正規表示式
- 用正規表示式判斷時間是否合法
- 匹配至少n位整數正規表示式
- 圖解時間複雜度圖解時間複雜度
- 淺談時間複雜度時間複雜度
- dfs時間複雜度分析時間複雜度
- 時間複雜度(詳解)時間複雜度
- 正規表示式同時匹配中英文及常用正規表示式
- 時間與空間複雜度分析複雜度
- 正規表示式{n,m}量詞(至少n次,最多m次)
- 122 演算法的時間複雜度和空間複雜度詳解演算法時間複雜度
- 時間複雜度的計算時間複雜度
- 解惑3:時間頻度,演算法時間複雜度演算法時間複雜度
- 校驗二十四小時制時間正規表示式
- PHP陣列函式的時間複雜度清單PHP陣列函式時間複雜度
- PHP 演算法基礎----時間複雜度和空間複雜度(轉載)PHP演算法時間複雜度