RosettaCodeData/Task/Longest-common-substring/Dyalect/longest-common-substring.dy...

29 lines
693 B
Plaintext

func lComSubStr(w1, w2) {
var (len, end) = (0, 0)
var mat = Array.Empty(w1.Length() + 1, () => Array.Empty(w2.Length() + 1, 0))
var (i, j) = (0, 0)
for sLett in w1 {
for tLett in w2 {
if tLett == sLett {
let curLen = mat[i][j] + 1
mat[i + 1][j + 1] = curLen
if curLen > len {
len = curLen
end = i
}
}
j += 1
}
j = 0
i += 1
}
String(values: w1).Substring((end + 1) - len, len)
}
func comSubStr(w1, w2) {
return String(lComSubStr(w1.Iterate().ToArray(), w2.Iterate().ToArray()))
}
comSubStr("thisisatest", "testing123testing") // "test"