介绍

名称匹配的主要问题之一是出错的可能性。 人们拼写同一个名字(错别字)的方式有很多,他们都听别人说的话。 有多种方法可以破坏自由格式语言数据。 当您需要搜索/匹配不良数据时,这会引起很多麻烦。

有许多不同的解决方法。 如

Levenshtein算法,计算使一个字符串与另一字符串匹配需要进行多少次编辑。 或NGram算法 ,它检查字符串组成的较小序列,并将其与插补字符串的序列进行比较。 还有一些语音算法,可以根据字符串的“声音”对字符串进行编码。 类似于SoundEx或Double Metaphone算法。 什么是双重中继器?

Double Metaphone是一种语音算法,它接受一个字符串,并产生两种关于如何用口语发音的编码。 因为一个单词有时可以以多种方式发音,所以产生两种编码。

它用于英语,包含许多关于字符串“声音”的规则。 它还试图解释斯拉夫语,日耳曼语,凯尔特语,希腊语,法语,意大利语,西班牙语,汉语和其他起源的罗马化单词的英语发音中的差异。

它是如何工作的?

该算法通过查看数百个语音规则来创建语音字符串。 它使用的规则的一些示例是:

  • P和B被编码为相同的声音。 除非P后跟H,然后将H编码为F声音。
  • SCI被编码为S声音,而SCO被编码为SK声音。
  • T和D被编码为相同的声音。 除非T后面跟随一个H,然后将H编码为由数字0表示的theta声音。

该算法会产生2个输入单词的潜在发音。 阈值参数确定每个发音的最大长度。 因此,LEFT(输出,阈值)是主要发音,而RIGHT(输出,阈值)是潜在的不同发音。 因此,当编码产生的语音的字符数少于阈值时的空格。

该算法被编码为一次编码一个单词,并且不处理字符串中的非字母字符。 因此,可能应在运行代码之前将其从字符串中提取出来。 在进行其他任何处理之前,将其提取或构建到函数中。

这是设计使然。 当使用较低的阈值时,较长的单词会被截断,并可能错误地与较短的单词匹配。 例如,阈值为4,“ foxtrot”和“ fixed”具有相同的编码。

因此,我将其作为参数而不是硬编码阈值,因此用户可以根据需要选择使用较大的阈值。

VBScript中的示例实现

此实现采用字符串s输入和长度i输入,并输出该字符串的2种可能的不同语音编码,每种长度为I。

例如,使用

DoubleMetaphone("Smith", 4)将返回SM0 XMT ,包括空格。

您可以使用它来预先计算表中名称或单词的发音,然后将2种不同的语音代码与表中的所有其他语音代码进行比较,以查找听起来相似的名称或单词。

Option Explicit
MsgBox(DoubleMetaphone(InputBox("Enter String"), 6))
Function DoubleMetaphone(strOriginal, intThreshhold)Dim isSlavoGermanic, strPrimary, strSecondary, i, intJump, iBDim intLength, cP, cS, arr, x, intPad isSlavoGermanic = FalseiB = 4intPad = 6x = iBintLength = Len(strOriginal) + iB - 1strOriginal = UCase(strOriginal) If (InStr(strOriginal, "W") + InStr(strOriginal, "K") + InStr(strOriginal, "CZ") + InStr(strOriginal, "WITZ")) <> 0 ThenisSlavoGermanic = TrueEnd If ReDim arr(intLength + intPad + 1) For i = 0 To iB-1arr(i) = vbTabNext For i = iB To intLengtharr(i) = Mid(strOriginal, i-iB+1, 1)Next For i = intLength+1 To UBound(arr)arr(i) = vbTabNext Select Case (arr(x) & arr(x+1))Case "AC"strPrimary = "AKS"strSecondary = "AKS"x = x + 4Case "GN", "KN", "PN", "PS"x = x + 1Case "HA", "HE", "HI", "HO", "HU", "HY"strPrimary = "H"strSecondary = "H"x = x + 2Case "WA", "WE", "WI", "WO", "WU", "WY"strPrimary = "A"strSecondary = "F"x = x + 2Case "WH"strPrimary = "A"strSecondary = "A"x = x + 1Case "SM", "SN", "SL", "SW"strPrimary = "S"strSecondary = "X"x = x + 1Case "GY"strPrimary = "K"strSecondary = "J"x = x + 2End Select If x = iB ThenIf arr(x) & arr(x+1) & arr(x+2) & arr(x+3) = "JOSE" ThenIf (x = iB And arr(x+4) = " ") ThenstrPrimary = "HS"strSecondary = "HS"x = x + 4End IfElseIf arr(x) & arr(x+1) & arr(x+2) & arr(x+3) & arr(x+4) = "SUGAR" ThenstrPrimary = "XK"strSecondary = "SK"x = x + 5ElseIf arr(x) & arr(x+1) & arr(x+2) & arr(x+3) & arr(x+4) & arr(x+5) = "CAESAR" ThenstrPrimary = "SSR"strSecondary = "SSR"x = x + 6ElseIf (arr(x) & arr(x+1) & arr(x+2) & arr(x+3) & arr(x+4) & arr(x+5) = "CHARAC" Or _arr(x) & arr(x+1) & arr(x+2) & arr(x+3) & arr(x+4) & arr(x+5) = "CHARIS" Or _arr(x) & arr(x+1) & arr(x+2) & arr(x+3) = "CHOR" Or _arr(x) & arr(x+1) & arr(x+2) & arr(x+3) = "CHYM" Or _arr(x) & arr(x+1) & arr(x+2) & arr(x+3) = "CHEM") And _arr(x) & arr(x+1) & arr(x+2) & arr(x+3) & arr(x+4) <> "CHORE" ThenstrPrimary = "K"strSecondary = "K"x = x + 2End IfEnd If If x = iB ThenSelect Case arr(x) & arr(x+1) & arr(x+2)Case "GES", "GEP", "GEB", "GEL", "GEY", "GIB", "GIL", "GIN", "GIE", "GEI", "GER"strPrimary = "K"strSecondary = "J"x = x + 2Case "GHI"strPrimary = "J"strSecondary = "J"x = x + 3Case "AGN", "EGN", "IGN", "OGN", "UGN", "UGY"If Not isSlavoGermanic ThenstrPrimary = "AKN"strSecondary = "AN"x = x + 3End IfEnd SelectEnd If If x = iB ThenSelect Case arr(x)Case "X"strPrimary = "S"strSecondary = "S"x = x + 1Case "A", "E", "I", "O", "U", "Y"strPrimary = "A"strSecondary = "A"x = x + 1Case "J"strPrimary = "J"strSecondary = "A"x = x + 1End SelectEnd If Do While x <= intLengthIf Len(strPrimary) >= intThreshhold ThenExit DoEnd If intJump = 1cP = arr(x)cS = arr(x) Select Case arr(x)Case "A", "E", "I", "O", "U", "Y"cP = ""cS = "" Case "B"cP = "P"cS = "P" Case "Ç"cP = "S"cS = "S" Case "C"If x > iB+1 And arr(x-2) <> "A" And arr(x-2) <> "E" And arr(x-2) <> "I" And arr(x-2) <> "O" And arr(x-2) <> "U" And _arr(x-2) <> "Y" And arr(x-1) & arr(x+1) = "AH" And ((arr(x+2) <> "I" And arr(x+2) <> "E") Or _arr(x-2) & arr(x+2) & arr(x+3) = "BER" Or arr(x-2) & arr(x+2) & arr(x+3) = "MER") ThencP = "K"cS = "K"intJump = 2ElseIf arr(x+1) & arr(x+2) & arr(x+3) = "HIA" ThencP = "K"cS = "K"intJump = 4ElseIf arr(x+1) = "H" ThenIf x > iB And arr(x+2) & arr(x+3) = "AE" ThencP = "K"cS = "X"intJump = 2ElseIf arr(iB) & arr(iB+1) & arr(iB+2) & arr(iB+3) = "VAN " Or _arr(iB) & arr(iB+1) & arr(iB+2) & arr(iB+3) = "VON " Or _arr(iB) & arr(iB+1) & arr(iB+2) = "SCH" Or arr(x+2) = "T" Or arr(x+2) = "S" Or _arr(x-2) & arr(x-1) & arr(x+1) & arr(x+2) & arr(x+3) = "ORHES" Or _arr(x-2) & arr(x-1) & arr(x+1) & arr(x+2) & arr(x+3) = "ARHIT" Or _arr(x-2) & arr(x-1) & arr(x+1) & arr(x+2) & arr(x+3) = "ORHID" Or _ ((arr(x-2) = "A" Or arr(x-2) = "E" Or arr(x-2) = "O" Or arr(x-2) = "U" Or x = iB) And _(arr(x+2) = "L" Or arr(x+2) = "R" Or arr(x+2) = "N" Or arr(x+2) = "M" Or arr(x+2) = "B" Or _arr(x+2) = "H" Or arr(x+2) = "F" Or arr(x+2) = "V" Or arr(x+2) = "W" Or arr(x+2) = " "))ThencP = "K"cS = "K"intJump = 2ElseintJump = 2 If x > iB ThenIf arr(iB) & arr(iB+1) = "MC" ThencP = "K"cS = "K"ElsecP = "X"cS = "K"End IfElsecP = "X"cS = "X"End IfEnd IfElseIf arr(x+1) = "Z" And arr(x-2) & arr(x-1) <> "WI" ThencP = "S"cS = "X"intJump = 2ElseIf arr(x+1) & arr(x+2) & arr(x+2) = "CIA" ThencP = "X"cS = "X"intJump = 3ElseIf arr(x+1) = "C" And Not (x = iB+1 And arr(iB) = "M") ThenIf (arr(x+2) = "I" Or arr(x+2) = "E" Or arr(x+2) = "H") And arr(x+2) & arr(x+3) <> "HU" ThenIf arr(x-1) & arr(x+1) & arr(x+2) & arr(x+3) = "UCEE" Or _arr(x-1) & arr(x+1) & arr(x+2) & arr(x+3) = "UCES" ThencP = "KS"cS = "KS"intJump = 3ElsecP = "X"cS = "X"intJump = 3End IfElsecP = "K"cS = "K"intJump = 2End IfElseIf arr(x+1) = "K" Or arr(x+1) = "G" Or arr(x+1) = "Q" ThencP = "K"cS = "K"intJump = 2ElseIf arr(x+1) = "I" Or arr(x+1) = "E" Or arr(x+1) = "Y" ThenIf arr(x+1) & arr(x+2) = "IO" Or arr(x+1) & arr(x+2) = "IE" Or arr(x+1) & arr(x+2) = "IA" ThencP = "S"cS = "X"intJump = 2ElsecP = "S"cS = "S"intJump = 2End IfElsecP = "K"cS = "K" If arr(x+1) & arr(x+2) = " C" Or arr(x+1) & arr(x+2) = " Q" Or arr(x+1) & arr(x+2) = " G" ThenintJump = 3ElseIf (arr(x+1) = "C" Or arr(x+1) = "K" Or arr(x+1) = "Q") And _arr(x+1) & arr(x+2) <> "CE" And arr(x+1) & arr(x+2) <> "CI" Then intJump = 2End IfEnd IfEnd If Case "D"If arr(x+1) = "G" ThenIf arr(x+2) = "I" Or _arr(x+2) = "E" Or _arr(x+2) = "Y" ThencP = "J"cS = "J"intJump = 3ElsecP = "TK"cS = "TK"intJump = 2End IfElseIf arr(x+1) = "T" ThencP = "T"cS = "T"intJump = 2ElsecP = "T"cS = "T"End If Case "G"If arr(x+1) = "H" ThenIf x <> iB And arr(x-1) <> "A" And arr(x-1) <> "E" And arr(x-1) <> "I" _And arr(x-1) <> "O" And arr(x-1) <> "U" And arr(x-1) <> "Y" ThencP = "K"cS = "K"intJump = 2ElseIf (x > iB+1 And (arr(x-2) = "B" Or arr(x-2) = "H" Or arr(x-2) = "D")) Or _(x > iB+2 And (arr(x-3) = "B" Or arr(x-3) = "H" Or arr(x-3) = "D")) Or _(x > iB+3 And (arr(x-4) = "B" Or arr(x-4) = "H")) ThencP = ""cS = ""intJump = 2ElseIf x > iB+2 And arr(x-1) = "U" And _(arr(x-3) = "C" Or arr(x-3) = "G" Or arr(x-3) = "L" Or arr(x-3) = "R" Or arr(x-3) = "T") ThencP = "F"cS = "F"intJump = 2ElseIf x > iB And arr(x-1) <> "I" ThencP = "K"cS = "K"intJump = 2ElsecP = ""cS = ""End IfEnd IfElseIf arr(x+1) = "N" ThencS = "KN"intJump = 2 If arr(x+2) & arr(x+3) <> "EY" And Not isSlavoGermanic ThencP = "N"ElsecP = "KN"End IfElseIf arr(x+1) & arr(x+2) = "LI" And Not isSlavoGermanic ThencP = "KL"cS = "L"intJump = 2ElseIf (arr(x+1) & arr(x+2) = "ER" Or arr(x+1) = "Y") And _arr(x-1) <> "E" And arr(x-1) <> "I" And _arr(x-1) & arr(x+1) <> "RY" And _arr(x-1) & arr(x+1) <> "OY" And _arr(iB) & arr(iB+1) & arr(iB+2) & arr(iB+3) & arr(iB+4) & arr(iB+5) <> "DANGER" And _arr(iB) & arr(iB+1) & arr(iB+2) & arr(iB+3) & arr(iB+4) & arr(iB+5) <> "RANGER" And _arr(iB) & arr(iB+1) & arr(iB+2) & arr(iB+3) & arr(iB+4) & arr(iB+5) <> "MANGER" ThencP = "K"cS = "J"intJump = 2ElseIf arr(x+1) = "E" Or arr(x+1) = "I" Or arr(x+1) = "Y" Or _arr(x-1) & arr(x) & arr(x+1) & arr(x+2) = "AGGI" Or _arr(x-1) & arr(x) & arr(x+1) & arr(x+2) = "OGGI" ThenIf arr(iB) & arr(iB+1) & arr(iB+2) & arr(iB+3) = "VON " Or _arr(iB) & arr(iB+1) & arr(iB+2) & arr(iB+3) = "VAN " Or _arr(iB) & arr(iB+1) & arr(iB+2) = "SCH" Or _arr(x+1) & arr(x+2) = "ET" ThencP = "K"cS = "K"intJump = 2ElsecP = "J"If arr(x+1) & arr(x+2) & arr(x+3) & arr(x+4) = "IER " ThencS = "J"intJump = 3ElsecS = "K"intJump = 2End IfEnd IfElsecP = "K"cS = "K"End If Case "H"If (arr(x-1) = "A" Or _arr(x-1) = "E" Or _arr(x-1) = "I" Or _arr(x-1) = "O" Or _arr(x-1) = "U" Or _arr(x-1) = "Y") And _(arr(x+1) = "A" Or _arr(x+1) = "E" Or _arr(x+1) = "I" Or _arr(x+1) = "O" Or _arr(x+1) = "U" Or _arr(x+1) = "Y") ThenintJump = 2ElsecP = ""cS = ""End If Case "J"If arr(iB) & arr(iB+1) & arr(iB+2) & arr(iB+3) = "SAN " ThencP = "H"cS = "H"ElseIf Not isSlavoGermanic And ( _arr(x-1) = "A" Or _arr(x-1) = "E" Or _arr(x-1) = "I" Or _arr(x-1) = "O" Or _arr(x-1) = "U" Or _arr(x-1) = "Y") And ( _arr(x+1) = "A" Or _arr(x+1) = "O") ThencS = "H"ElseIf x = intLength ThencS = ""ElseIf arr(x+1) = "L" Or arr(x+1) = "T" Or arr(x+1) = "K" Or _arr(x+1) = "S" Or arr(x+1) = "N" Or arr(x+1) = "M" Or _arr(x+1) = "B" Or arr(x+1) = "Z" Or _arr(x-1) = "S" Or arr(x-1) = "K" Or arr(x-1) = "L" ThencP = ""cS = ""End IfEnd IfEnd IfEnd If Case "L"If arr(x+1) = "L" ThenintJump = 2 If ((x = intLength-2 And ( _arr(x-1) & arr(x) & arr(x+1) & arr(x+2) = "ILLO" Or _arr(x-1) & arr(x) & arr(x+1) & arr(x+2) = "ILLA" Or _arr(x-1) & arr(x) & arr(x+1) & arr(x+2) = "ALLE" _)) Or (( _arr(intLength-1) & arr(intLength) = "AS" Or _arr(intLength-1) & arr(intLength) = "OS" Or _arr(intLength) = "A" Or arr(intLength) = "O") And _arr(x-1) & arr(x) & arr(x+1) & arr(x+2) = "ALLE")) ThencS = ""End IfEnd If Case "M"If arr(x-1) & arr(x) & arr(x+1) = "UMB" And _(x = intLength-1 Or arr(x+2) & arr(x+3) = "ER") ThenintJump = 2End If Case "P"Select Case arr(x+1)Case "H"cP = "F"cS = "F"intJump = 2Case "B"intJump = 2End Select Case "Q"cP = "K"cS = "K" Case "R"If x = intLength And Not isSlavoGermanic And _arr(x-2) & arr(x-1) = "IE" And _arr(x-4) & arr(x-3) <> "ME" And _arr(x-4) & arr(x-3) <> "MA" ThencP = ""End If Case "S"If arr(x+1) = "L" And (arr(x-1) = "I" Or arr(x-1) = "Y") ThencP = ""cS = ""ElseIf arr(x+1) = "H" And _arr(x+2) & arr(x+3) & arr(x+4) <> "EIM" And _arr(x+2) & arr(x+3) & arr(x+4) <> "OEK" And _arr(x+2) & arr(x+3) & arr(x+4) <> "OLM" And _arr(x+2) & arr(x+3) & arr(x+4) <> "OLZ" ThenintJump = 2cP = "X"cS = "X"ElseIf Not isSlavoGermanic And ( _arr(x+1) & arr(x+2) = "IA" Or _arr(x+1) & arr(x+2) = "IO") ThenintJump = 3cS = "X"ElseIf arr(x+1) = "Z" ThencS = "X"intJump = 2ElseIf arr(x+1) = "C" ThenintJump = 3 If arr(x+2) = "H" ThenIf arr(x+3) & arr(x+4) = "OO" Or _arr(x+3) & arr(x+4) = "ER" Or _arr(x+3) & arr(x+4) = "EN" Or _arr(x+3) & arr(x+4) = "UY" Or _arr(x+3) & arr(x+4) = "ED" Or _arr(x+3) & arr(x+4) = "EM" ThencS = "SK" If arr(x+3) & arr(x+4) = "ER" Or _arr(x+3) & arr(x+4) = "EN" ThencP = "X"ElsecP = "SK"End IfElsecP = "X" If x <> iB Or arr(iB+3) = "W" Or arr(iB+3) = "A" Or _arr(iB+3) = "E" Or arr(iB+3) = "I" Or arr(iB+3) = "O" Or _arr(iB+3) = "U" Or arr(iB+3) = "Y" ThencS = "X"End IfEnd IfElseIf arr(x+2) = "I" Or arr(x+2) = "E" Or arr(x+2) = "Y" ThenElsecP = "SK"cS = "SK"End IfElseIf x = intLength And arr(x-1) = "I" And ( _arr(x-2) = "A" Or arr(x-2) = "O") ThencP = ""End If Case "T"If arr(x+1) & arr(x+2) & arr(x+3) = "ION" _Or arr(x+1) & arr(x+2) = "IA" _Or arr(x+1) & arr(x+2) = "CH" ThencP = "X"cS = "X"intJump = 3ElseIf (arr(x+1) = "H" Or arr(x+1) & arr(x+2) = "TH") And _(arr(x+2) & arr(x+3) <> "OM" And _arr(x+2) & arr(x+3) <> "AM" And _arr(iB) & arr(iB+1) & arr(iB+2) <> "SCH" And _arr(iB) & arr(iB+1) & arr(iB+2) & arr(iB+3) <> "VAN " And _arr(iB) & arr(iB+1) & arr(iB+2) & arr(iB+3) <> "VON ") ThencP = "0"intJump = 2ElseIf arr(x+1) = "D" ThenintJump = 2End If Case "V"cP = "F"cS = "F" Case "W"If arr(x+1) = "R" ThencP = "R"cS = "R"intJump = 2ElseIf arr(iB) & arr(iB+1) & arr(iB+2) = "SCH" _Or (x = intLength And ( _arr(x-1) = "A" Or _arr(x-1) = "E" Or _arr(x-1) = "I" Or _arr(x-1) = "O" Or _arr(x-1) = "U" Or _arr(x-1) = "Y")) _Or ((arr(x-1) = "E" Or arr(x-1) = "O") And _(arr(x+1) & arr(x+2) & arr(x+3) = "SKI" Or _arr(x+1) & arr(x+2) & arr(x+3) = "SKY")) ThencP = ""cS = "F"ElseIf arr(x+1) & arr(x+2) & arr(x+3) = "ICZ" _Or arr(x+1) & arr(x+2) & arr(x+3) = "ITZ" ThencP = "TS"cS = "FX"intJump = 4ElsecP = ""cS = ""End If Case "X"If x = intLength And _(arr(x-3) & arr(x-2) & arr(x-1) = "IAU" Or _ arr(x-3) & arr(x-2) & arr(x-1) = "EAU" Or _arr(x-2) & arr(x-1) = "AU" Or _arr(x-2) & arr(x-1) = "OU") ThencP = ""cS = ""ElsecP = "KS"cS = "KS"End If If arr(x+1) = "C" ThenintJump = 2End If Case "Z"If arr(x+1) = "H" ThencP = "J"cS = "J"ElseIf (arr(x+1) & arr(x+2) = "ZO" Or _arr(x+1) & arr(x+2) = "ZI" Or _arr(x+1) & arr(x+2) = "ZA") _Or (isSlavoGermanic And x <> iB And arr(x-1) = "T") ThencP = "S"cS = "TS"ElsecP = "S"cS = "S"End IfEnd Select strPrimary = strPrimary & cPstrSecondary = strSecondary & cS If arr(x) = arr(x+1) And arr(x) <> "C" ThenintJump = intJump + 1End Ifx = x + intJumpLoop For i = 1 To intThreshholdstrPrimary = strPrimary & " "strSecondary = strSecondary & " "Next DoubleMetaphone = Left(strPrimary, intThreshhold) & Left(strSecondary, intThreshhold)
End Function

From: https://bytes.com/topic/access/insights/965241-fuzzy-string-matching-double-metaphone-algorithm

模糊字符串匹配:双音素算法相关推荐

  1. 如何在Postgresql中使用模糊字符串匹配

    It's a fact - people make typos or simply use alternate spellings on a frequent basis. 这是事实-人们经常打错字或 ...

  2. 【NLP】基于TF-IDF和KNN的模糊字符串匹配优化

    作者 | Audhi Aprilliant 编译 | VK 来源 | Towards Data Science 在处理真实数据时,最大的问题主要是数据预处理. 匹配可能是许多分析师面临的最大挑战之一. ...

  3. C语言实现字符串匹配的Rabin-Karp算法(附完整源码)

    实现字符串匹配的Rabin-Karp算法 实现以以下相关接口 boyer moore博伊尔-摩尔搜索算法的完整源码(定义,实现,main函数测试) 实现以以下相关接口 void rabin_karp_ ...

  4. [算法系列之二十六]字符串匹配之KMP算法

    一 简介 KMP算法是一种改进的字符串匹配算法,由D.E.Knuth与V.R.Pratt和J.H.Morris同时发现,因此人们称它为克努特-莫里斯-普拉特操作(简称KMP算法).KMP算法的关键是利 ...

  5. 字符串匹配(KMP 算法 含代码)

    主要是针对字符串的匹配算法进行解说 有关字符串的基本知识 传统的串匹配法 模式匹配的一种改进算法KMP算法 网上一比較易懂的解说 小样例 1计算next 2计算nextval 代码 有关字符串的基本知 ...

  6. php随机匹配算法,字符串匹配的KMP算法+PHP实现

    1. 前言 看了阮一峰的字符串匹配的KMP算法,写得很好,推荐看看. 不过我想自己写个例子描述一下这个算法,顺便写个PHP实现,于是有了这篇博文. 2. 概述 [来自维基百科] 字符串搜索算法 字符串 ...

  7. 模糊字符串匹配:双重解密算法

    名称匹配的一个大问题是错误的倾向.有许多不同的方式,人们拼写相同的名字,打字错误,误读了另一个人说的话.有许多方法可以免费形式的语言数据被破坏.当您需要搜索/匹配不良数据时,会导致许多头疼. 有很多不 ...

  8. 三十五、字符串匹配问题--KMP算法

    一.暴力匹配算法实现字符串匹配 如果用暴力匹配的思路,并假设现在 str1 匹配到 i 位置,子串 str2 匹配到 j 位置,则有: 如果当前字符匹配成功(即 str1[i] == str2[j]) ...

  9. 字符串匹配的KMP算法(转)

    转自:http://www.ruanyifeng.com/blog/2013/05/Knuth%E2%80%93Morris%E2%80%93Pratt_algorithm.html 字符串匹配是计算 ...

最新文章

  1. unity 代码边缘发光_Shader案例之内发光和边缘泛光效果
  2. 【集合论】序关系 ( 偏序集元素之间的关系 | 可比 | 严格小于 | 覆盖 | 哈斯图 )
  3. SQL查询入门(中篇)
  4. python 欧氏距离_如何用NumPy计算欧氏距离?
  5. 计算机通信辞典登录,数字化
  6. 遗传算法求解旅行商问题
  7. 大一微积分笔记整理_大学数学-微积分学笔记.pdf
  8. 王道训练营—Java编程经典50题
  9. 禁用EnableViewState和启用EnableViewStat时请注意
  10. 一台电脑中,如何使 git 同时配置Github、Gitee等多种版本控制工具
  11. H3CNE概念思维导图
  12. 50个最受欢迎的大数据面试问题
  13. 增强现实(AR)、虚拟现实(VR)、混合现实(MR)之间有什么区别?
  14. html表格线条不显示,cline处理表格不显示线条
  15. Qt去除libpng warning: iCCP: known incorrect sRGB profile警告
  16. golang gorm增删改查db.Model db.Where db.Table
  17. 关于程序集生成失败 -- 引用的程序集没有强名称的解决办法
  18. 计算机软考高项(信息系统项目管理师)、中项(系统集成项目管理工程师),统计师中级的一些备考经验
  19. like用法--mysql
  20. FastAPI--参数提交Request Body(3)

热门文章

  1. EC11旋转编码器驱动程序
  2. 常用类:Java比较器
  3. 免费jsp空间建站攻略【eatj】【入门】【教程】
  4. 欧拉角、万向节死锁理解
  5. CentOS7-命令-创建用户(useradd)
  6. Android 传感器之《加速传感器》——摇一摇功能
  7. 移动网络http请求不到数据,wifi下可以
  8. 51单片机频率计c语言程序,51单片机简易频率计源代码
  9. 一个优秀的领导者,无非就这3点
  10. 函数的参数、返回、调用、递归