Skip to content

Instantly share code, notes, and snippets.

@reterVision
Created June 20, 2014 03:25
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save reterVision/f1c45632d78ff4c4e08e to your computer and use it in GitHub Desktop.
Save reterVision/f1c45632d78ff4c4e08e to your computer and use it in GitHub Desktop.
Longest Common Strings in Go
package main
import (
"bufio"
"fmt"
"log"
"os"
"strings"
)
func main() {
file, err := os.Open(os.Args[1])
if err != nil {
log.Fatal(err)
}
scanner := bufio.NewScanner(file)
for scanner.Scan() {
texts := strings.Split(scanner.Text(), ";")
fmt.Println(lcs(texts[0], texts[1]))
}
}
func max(a, b int) int {
if a >= b {
return a
} else {
return b
}
}
func lcs(s1, s2 string) int {
suffixTable := make([][]int, len(s2)+1)
for i := range suffixTable {
suffixTable[i] = make([]int, len(s1)+1)
}
result := 0
for i := 0; i <= len(s2); i++ {
for j := 0; j <= len(s1); j++ {
if i == 0 || j == 0 {
suffixTable[i][j] = 0
} else if s2[i-1] == s1[j-1] {
suffixTable[i][j] = max(result, suffixTable[i-1][j-1]+1)
result = suffixTable[i][j]
} else {
suffixTable[i][j] = 0
}
}
}
return result
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment