"Longest Duplicate Substring" accepted solution, involving binary search and a map

This commit is contained in:
2022-06-01 21:45:06 +03:00
parent 16d840cc45
commit 2999529ad5
2 changed files with 72 additions and 2 deletions

View File

@@ -290,6 +290,51 @@ func LongestDupSubstringGoroutines(s string) string {
return res
}
func LongestDupSubstring(s string) string {
return LongestDupSubstringGoroutines(s)
func DupSubstringLengthN(s string, n int) string {
StringMap := map[string]interface{}{}
for begin := 0; begin <= len(s)-n; begin++ {
end := begin + n
str := s[begin:end]
_, ok := StringMap[str]
if ok {
return str
}
StringMap[str] = nil
}
return ""
}
func LongestDupSubstringBinarySearchAndMap(s string) string {
maxLen := 0
dups := map[int]string{}
dups[0] = ""
left := 0
right := len(s)
mid := 0
for left < right {
mid = (left + right) / 2
res := DupSubstringLengthN(s, mid)
if len(res) > 0 {
dups[mid] = res
left = mid + 1
if mid > maxLen {
maxLen = mid
}
} else {
right = mid
}
}
return dups[maxLen]
}
func LongestDupSubstring(s string) string {
return LongestDupSubstringBinarySearchAndMap(s)
}

File diff suppressed because one or more lines are too long