question
字串1:只含有英文本母
字串2:含有英文本母和*,其中符號*表示匹配任意字元0或者多次,即正規表示式裡面的含義。
現在給定這樣的兩個串,要求判斷是否匹配?
bool ismatch ( const char *str1, const char *str2)
例如:str1 = 「hello」, str2 = 「he*o」,則二者匹配,返回true,str1 = 「hello」, str2 = 「he*l」,則不匹配,返回false。
solution
關鍵是如何處理*,首先想到的就是回溯,在紙上畫了一下得到如下演算法
設輸入是兩個字串 s, t, 其中t可能包含* <.p>
1.當*t不是*的時候, 就像普通的串匹配一樣, 移動s和t
2.當*t是*的時候, 假設*t後面第乙個不是*的字元是x, 若x是null, 直接匹配成功, 否則在s中找到當前位置後所有字元x的位置, 這時候問題轉化成了t中x後的串和s中當前位置以後所有以x為開始的串的匹配問題, 遞迴呼叫即可, 其中任意乙個匹配成功, 則原串匹配成功, 若都沒有匹配成功則匹配失敗.
3.當*s和*t其中乙個是null時 跳出迴圈, 若此時 *t == 『*』, 則++t 知道 t != 『*』, 這時若 *t == 0 則代表匹配成功, 否則匹配失敗。
**如下:
#include
#include
using namespace std;
bool is_match(const char * s, const char * t)
}while (*t == '*') ++t;
if (*s == *t) return true;
else return false;
}int main(int argc, char * argv)
含有萬用字元的字串匹配
字串匹配問題,給定兩個字串,求字串2,在字串1中的最先匹配結果。字串2中可以存在 符號,且該符號可以代表任意字元,即字串2中存在萬用字元。e.g.輸入 abcdefghabef,a f 輸出 abcdef include include using namespace std bool match ...
含有萬用字元的字串匹配
字串匹配問題,給定兩個字串。求字串2。在字串1中的最先匹配結果。字串2中能夠存在 符號,且該符號能夠代表隨意字元,即字串2中存在萬用字元。e.g.輸入 abcdefghabef,a f 輸出 abcdef include include using namespace std bool match ...
字串匹配問題
在字串匹配問題中,我們期待察看串t中是否含有串p。其中串t被稱為目標串,串s被稱為模式串。進行字串匹配,最簡單的乙個想法是 public class match 可以看見,這個演算法 假定m n 的複雜度是o mn 其中m是t的長度,n是p的長度。這種演算法的缺陷是匹配過程中帶有回溯 準確地說是t串...