mirror of
https://github.com/yusing/godoxy.git
synced 2025-05-19 20:32:35 +02:00
88 lines
1.3 KiB
Go
88 lines
1.3 KiB
Go
package strutils
|
|
|
|
import (
|
|
"strings"
|
|
|
|
"golang.org/x/text/cases"
|
|
"golang.org/x/text/language"
|
|
)
|
|
|
|
// CommaSeperatedList returns a list of strings split by commas,
|
|
// then trim spaces from each element.
|
|
func CommaSeperatedList(s string) []string {
|
|
if s == "" {
|
|
return []string{}
|
|
}
|
|
res := SplitComma(s)
|
|
for i, part := range res {
|
|
res[i] = strings.TrimSpace(part)
|
|
}
|
|
return res
|
|
}
|
|
|
|
func Title(s string) string {
|
|
return cases.Title(language.AmericanEnglish).String(s)
|
|
}
|
|
|
|
func ToLowerNoSnake(s string) string {
|
|
var buf strings.Builder
|
|
for _, r := range s {
|
|
if r == '_' {
|
|
continue
|
|
}
|
|
if r >= 'A' && r <= 'Z' {
|
|
r += 'a' - 'A'
|
|
}
|
|
buf.WriteRune(r)
|
|
}
|
|
return buf.String()
|
|
}
|
|
|
|
//nolint:intrange
|
|
func LevenshteinDistance(a, b string) int {
|
|
if a == b {
|
|
return 0
|
|
}
|
|
if len(a) == 0 {
|
|
return len(b)
|
|
}
|
|
if len(b) == 0 {
|
|
return len(a)
|
|
}
|
|
|
|
v0 := make([]int, len(b)+1)
|
|
v1 := make([]int, len(b)+1)
|
|
|
|
for i := 0; i <= len(b); i++ {
|
|
v0[i] = i
|
|
}
|
|
|
|
for i := 0; i < len(a); i++ {
|
|
v1[0] = i + 1
|
|
|
|
for j := 0; j < len(b); j++ {
|
|
cost := 0
|
|
if a[i] != b[j] {
|
|
cost = 1
|
|
}
|
|
|
|
v1[j+1] = min3(v1[j]+1, v0[j+1]+1, v0[j]+cost)
|
|
}
|
|
|
|
for j := 0; j <= len(b); j++ {
|
|
v0[j] = v1[j]
|
|
}
|
|
}
|
|
|
|
return v1[len(b)]
|
|
}
|
|
|
|
func min3(a, b, c int) int {
|
|
if a < b && a < c {
|
|
return a
|
|
}
|
|
if b < a && b < c {
|
|
return b
|
|
}
|
|
return c
|
|
}
|