bd9383fd82
12 funciones puras con implementación real: HashSHA256, HashMD5, EntropyShannon, IsBase64, IsHex, ExtractURLs, ParseIPCIDR, IPInRange, NormalizeURL, DetectSQLInjection, LevenshteinDistance, JaccardSimilarity 4 funciones impuras con implementación real (stdlib): LookupWhois, ResolveDNS, FetchHTTPHeaders, ScanPortTCP Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
50 lines
776 B
Go
50 lines
776 B
Go
package cybersecurity
|
|
|
|
// LevenshteinDistance calcula la distancia de edicion (Levenshtein) entre dos strings.
|
|
func LevenshteinDistance(a, b string) int {
|
|
ra := []rune(a)
|
|
rb := []rune(b)
|
|
la := len(ra)
|
|
lb := len(rb)
|
|
|
|
if la == 0 {
|
|
return lb
|
|
}
|
|
if lb == 0 {
|
|
return la
|
|
}
|
|
|
|
// Usar solo dos filas para optimizar memoria
|
|
prev := make([]int, lb+1)
|
|
curr := make([]int, lb+1)
|
|
|
|
for j := 0; j <= lb; j++ {
|
|
prev[j] = j
|
|
}
|
|
|
|
for i := 1; i <= la; i++ {
|
|
curr[0] = i
|
|
for j := 1; j <= lb; j++ {
|
|
cost := 1
|
|
if ra[i-1] == rb[j-1] {
|
|
cost = 0
|
|
}
|
|
del := prev[j] + 1
|
|
ins := curr[j-1] + 1
|
|
sub := prev[j-1] + cost
|
|
|
|
m := del
|
|
if ins < m {
|
|
m = ins
|
|
}
|
|
if sub < m {
|
|
m = sub
|
|
}
|
|
curr[j] = m
|
|
}
|
|
prev, curr = curr, prev
|
|
}
|
|
|
|
return prev[lb]
|
|
}
|