字串模糊匹配遞迴實現優化1

2021-06-17 16:33:28 字數 1515 閱讀 8691

此程式可以匹配相似度比較大的字串。

例如:fr-irc6【產品描述:配件|family interdomain routing feature配件】

fr-irc6【產品描述:附件|family interdomain routing feature附件】

熱縮套管【產品描述:1ac000570003|3/8熱縮套管|三檔】

熱縮套管【產品描述:1ac000570003|3/8"熱縮套管|三檔】

這些字串都可以。不匹配字元要設定在小於10。用百分比方式計算不匹配字元:字串長度*(1-n%)<10

**如下,加入深度判斷。

package test2;

inte***ce matchhander

public class match

/*** 幾個錯誤的字元可以接受

* a與ab為1個字元錯誤可以接受

* @param percent 設定匹配百分比

* @param src 字串1

* @param dest 字串2

* @param hander 匹配規則

* @return

*/public static boolean match(int errornum,string src,string dest,matchhander hander)

/*** 2個字串75%匹配成功返回true

* @param src

* @param dest

* @return

*/public static boolean match(double percent,string src,string dest)});

} /**

* 2個字串錯幾個字元可以接受

* @param errornum

* @param src

* @param dest

* @return

*/public static boolean match(int errornum,string src,string dest)});

} /**

* 使用遞迴方法匹配字串

* @param csrc

* @param i

* @param cdest

* @param j

* @param hander

* @return

*/private static int cal(char csrc, int i, char cdest, int j, matchhander hander,int curdeep,int maxdeep) {

int score = 0;

if( curdeep > maxdeep ||i >= csrc.length || j >= cdest.length)

return 0;

boolean ismatch = hander.compare(csrc[i], cdest[j]);

if(ismatch){

score++;

if(i+1

C 實現的字串模糊匹配

c 基本沒有正規表示式功能,當然像boost裡提供了正則。本文 於園友的一篇文章,請看 很早之前就看過這篇文章,原作者的需求很明確 實現也很好。之所以又寫這篇文章,是因為原作者只介紹了在linux系統下直接呼叫系統函式fnmatch即可實現,而沒有考慮在windows在的使用。本人這週看了下goog...

關於字串模糊匹配

一種比kmp和bm 更高效的匹配演算法 如果想看原英文介紹,看下面分割線後的 適用於 模式串較短的情況,最壞時間複雜性為o n m 不過一般沒這麼壞 sunday演算法其實思想跟bm演算法很相似,只不過sunday演算法是從前往後匹配,在匹配失敗時關注的是文字串中參加匹配的最末位字元的下一位字元。如...

字串模糊匹配 根據萬用字元

在我們程式設計過程中,經常需要遇到字串和指定的模板匹配,需要返回是否匹配字串模板。其中符號 匹配任意多個位元組,匹配單個字元 模板形式舉例如下 1 010 010?用於判斷 號碼是否是010開頭。2 民主 用於判斷文字中是否含有敏感詞。3 銀行 信用卡 用於判斷文字中是否含有特殊的語義。我們需要用文...