乙個很難的字串問題

2021-06-04 01:03:30 字數 880 閱讀 4079

問題描述:

有 n 個 regex (正規表示式),標號從 0 到 n-1,n 可能很大 (比如說100萬)

給定乙個字串,返回能 match 這個字串的所有正規表示式標號。

用 c++ 來描述這個需求:

class multiregex ;

// return the index no. of the internal regex object, -1 indicate error

int add(const char* regex);

// compile the multiregex

bool compile();

// length is the length of text

vectormatch(const char* text, int length) const;

};

這個問題看上去簡單,但其實現非常複雜!乙個簡單生硬的實現是,隨便拿乙個正規表示式引擎(如boost.regex, pcre, re2, ...),match 時逐個匹配,匹配成功的,加入返回值集合。但這個時間複雜度太高!

原則上,unix 下的 lex 可以匹配多個 regex,並返回那個被匹配的 regex 標號,但好像無法識別多個成功的 regex 匹配。

這個問題的乙個簡化版:這 n 個 regex 只是簡單的 plainstring,就是 multi string match 問題,甚至是這個簡化版,其實現複雜多都相當高(trie, double array, ...)。

我找了很多資料,好像都沒有特別合適的辦法。

2013-08-31:

google re2 中有同時匹配多個正規表示式的功能,可惜還是有些缺陷,正在做自己的引擎,克服那些缺陷

乙個php 字串判斷問題

先看 你覺得下面的 會輸出什麼結果 a 10 b 1e1 if a b else輸出結果是 相等 檢視官網 當乙個字串被當作乙個數值來取值,其結果和型別如下 如果該字串沒有包含 e 或 e 並且其數字值在整型的範圍之內 由 php int max 所定義 該字串將被當成 integer 來取值。其它...

在乙個長字串中刪除乙個短字串

輸入兩個字串,從第一字串中刪除第二個字串中所有的字元。例如,輸入 they are students.和 aeiou 則刪除之後的第乙個字串變成 thy r stdnts.這裡注意 從乙個字串中刪除字串的時候,如果是通過刪除乙個字串就移動後面所有的字元,就非常複雜了。通過hash表記錄第二個字串 現...

字串替換問題 「乙個換多個」

將字串中的空格替換成 2 0 1 該問題最簡單的解決辦法是重新申請乙個新的字串陣列,遍歷原字串陣列。若是非空格就直接拷貝到新陣列,若是空格就直接在新陣列中加入 2 0 三個字元。最後遍歷結束,將新字串拷貝給就字串,釋放新申請的字串的記憶體空間。但該方法的空間複雜度比較高,因此可能在一定的條件下不太適...