mirror of
https://github.com/AynaLivePlayer/AynaLivePlayer.git
synced 2026-04-25 09:49:53 +08:00
ui界面优化,event handler优化-新增任务池模式,歌词加载优化,新房间管理(可以自动连接) 本地音频搜索算法优化,
This commit is contained in:
@@ -5,18 +5,7 @@ import (
|
||||
"strconv"
|
||||
)
|
||||
|
||||
func SliceString(str string, from int, to int) (string, bool) {
|
||||
sList := []rune(str)
|
||||
if to <= 0 {
|
||||
to = len(sList) + to
|
||||
}
|
||||
if from >= len(sList) || to > len(sList) {
|
||||
return "", false
|
||||
}
|
||||
return string(sList[from:to]), true
|
||||
}
|
||||
|
||||
func LenString(str string) int {
|
||||
func StrLen(str string) int {
|
||||
return len([]rune(str))
|
||||
}
|
||||
|
||||
@@ -25,29 +14,106 @@ func StringNormalize(str string, min int, max int) string {
|
||||
return fmt.Sprintf(fmtStr, str)
|
||||
}
|
||||
|
||||
func StringSliceContains(s []string, e string) bool {
|
||||
for _, a := range s {
|
||||
if a == e {
|
||||
return true
|
||||
}
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func StringToInt(s string) int {
|
||||
func Atoi(s string) int {
|
||||
i, _ := strconv.Atoi(s)
|
||||
return i
|
||||
}
|
||||
|
||||
func StringSliceCopy(src []string) []string {
|
||||
x := make([]string, len(src))
|
||||
copy(x, src)
|
||||
return x
|
||||
}
|
||||
|
||||
func GetOrDefault(s string, def string) string {
|
||||
if s == "" {
|
||||
return def
|
||||
}
|
||||
return s
|
||||
}
|
||||
|
||||
func LevenshteinDistance(s1 string, s2 string) int {
|
||||
// support unicode
|
||||
r1 := []rune(s1)
|
||||
r2 := []rune(s2)
|
||||
r1l := len(r1)
|
||||
r2l := len(r2)
|
||||
if r1l == 0 || r2l == 0 {
|
||||
return Max(r1l, r2l)
|
||||
}
|
||||
previous := make([]int, r2l+1)
|
||||
current := make([]int, r2l+1)
|
||||
|
||||
for i := 0; i <= r2l; i++ {
|
||||
previous[i] = i
|
||||
}
|
||||
|
||||
for i := 1; i <= r1l; i++ {
|
||||
current[0] = i
|
||||
for j := 1; j <= r2l; j++ {
|
||||
subCost := 1
|
||||
if r1[i-1] == r2[j-1] {
|
||||
subCost = 0
|
||||
}
|
||||
// current[j] = min( insertCost,deleteCost, subCost)
|
||||
current[j] = Min(current[j-1]+1, previous[j]+1, previous[j-1]+subCost)
|
||||
}
|
||||
current, previous = previous, current
|
||||
}
|
||||
return previous[r2l]
|
||||
}
|
||||
|
||||
func WeightedLevenshteinDistance(s1 string, s2 string, ins, del, repl int) int {
|
||||
// support unicode
|
||||
r1 := []rune(s1)
|
||||
r2 := []rune(s2)
|
||||
r1l := len(r1)
|
||||
r2l := len(r2)
|
||||
if r1l == 0 || r2l == 0 {
|
||||
return Max(r1l, r2l)
|
||||
}
|
||||
previous := make([]int, r2l+1)
|
||||
current := make([]int, r2l+1)
|
||||
|
||||
for i := 0; i <= r2l; i++ {
|
||||
previous[i] = i
|
||||
}
|
||||
|
||||
for i := 1; i <= r1l; i++ {
|
||||
current[0] = i
|
||||
for j := 1; j <= r2l; j++ {
|
||||
subCost := 1
|
||||
if r1[i-1] == r2[j-1] {
|
||||
subCost = 0
|
||||
}
|
||||
// current[j] = min( insertCost,deleteCost, subCost)
|
||||
current[j] = Min(current[j-1]+1*ins, previous[j]+1*del, previous[j-1]+subCost*repl)
|
||||
}
|
||||
current, previous = previous, current
|
||||
}
|
||||
return previous[r2l]
|
||||
}
|
||||
|
||||
func LongestCommonString(s1 string, s2 string) string {
|
||||
// support unicode
|
||||
r1 := []rune(s1)
|
||||
r2 := []rune(s2)
|
||||
r1l := len(r1)
|
||||
r2l := len(r2)
|
||||
if r1l == 0 || r2l == 0 {
|
||||
return ""
|
||||
}
|
||||
previous := make([]int, r2l+1)
|
||||
current := make([]int, r2l+1)
|
||||
max := 0
|
||||
maxIndex := 0
|
||||
for i := 1; i <= r1l; i++ {
|
||||
for j := 1; j <= r2l; j++ {
|
||||
if r1[i-1] == r2[j-1] {
|
||||
current[j] = previous[j-1] + 1
|
||||
if current[j] > max {
|
||||
max = current[j]
|
||||
maxIndex = i
|
||||
}
|
||||
} else {
|
||||
current[j] = 0
|
||||
}
|
||||
}
|
||||
current, previous = previous, current
|
||||
}
|
||||
return string(r1[maxIndex-max : maxIndex])
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user