clean
parent
8be5a00e3d
commit
2e99f85c21
30
src/edit.jl
30
src/edit.jl
|
@ -247,3 +247,33 @@ function matching_blocks!(x::Set{Tuple{Int, Int, Int}}, s1::AbstractString, s2::
|
|||
len2 - (a[2] + a[3]) + 1, start1 + a[1] + a[3] - 1, start2 + a[2] + a[3] - 1)
|
||||
return x
|
||||
end
|
||||
|
||||
# Return start of commn substring in s1, start of common substring in s2, and length of substring
|
||||
# Indexes refer to character number, not index
|
||||
function longest_common_substring(s1::AbstractString, s2::AbstractString, len1::Integer, len2::Integer)
|
||||
if len1 > len2
|
||||
start2, start1, len = longest_common_substring(s2, s1, len2, len1)
|
||||
else
|
||||
start1, start2, len = 0, 0, 0
|
||||
p = zeros(Int, len2)
|
||||
i1 = 0
|
||||
for ch1 in s1
|
||||
i1 += 1
|
||||
i2 = 0
|
||||
oldp = 0
|
||||
for ch2 in s2
|
||||
i2 += 1
|
||||
newp = 0
|
||||
if ch1 == ch2
|
||||
newp = oldp > 0 ? oldp : i2
|
||||
currentlength = (i2 - newp + 1)
|
||||
if currentlength > len
|
||||
start1, start2, len = i1 - currentlength + 1, newp, currentlength
|
||||
end
|
||||
end
|
||||
p[i2], oldp = newp, p[i2]
|
||||
end
|
||||
end
|
||||
end
|
||||
return start1, start2, len
|
||||
end
|
34
src/utils.jl
34
src/utils.jl
|
@ -11,7 +11,6 @@ Base.nextind(s::StringWithLength, i::Int, n::Int = 1) = nextind(s.s, i, n)
|
|||
Base.ncodeunits(s::StringWithLength) = ncodeunits(s.s)
|
||||
Base.isvalid(s::StringWithLength, i::Int) = isvalid(s.s, i)
|
||||
|
||||
|
||||
function reorder(s1::AbstractString, s2::AbstractString)
|
||||
s1 = string_with_length(s1)
|
||||
s2 = string_with_length(s2)
|
||||
|
@ -37,35 +36,4 @@ function remove_prefix(s1::AbstractString, s2::AbstractString, lim::Integer = -1
|
|||
l += 1
|
||||
end
|
||||
return l, x1, x2
|
||||
end
|
||||
|
||||
|
||||
# Return start of commn substring in s1, start of common substring in s2, and length of substring
|
||||
# Indexes refer to character number, not index
|
||||
function longest_common_substring(s1::AbstractString, s2::AbstractString, len1::Integer, len2::Integer)
|
||||
if len1 > len2
|
||||
start2, start1, len = longest_common_substring(s2, s1, len2, len1)
|
||||
else
|
||||
start1, start2, len = 0, 0, 0
|
||||
p = zeros(Int, len2)
|
||||
i1 = 0
|
||||
for ch1 in s1
|
||||
i1 += 1
|
||||
i2 = 0
|
||||
oldp = 0
|
||||
for ch2 in s2
|
||||
i2 += 1
|
||||
newp = 0
|
||||
if ch1 == ch2
|
||||
newp = oldp > 0 ? oldp : i2
|
||||
currentlength = (i2 - newp + 1)
|
||||
if currentlength > len
|
||||
start1, start2, len = i1 - currentlength + 1, newp, currentlength
|
||||
end
|
||||
end
|
||||
p[i2], oldp = newp, p[i2]
|
||||
end
|
||||
end
|
||||
end
|
||||
return start1, start2, len
|
||||
end
|
||||
end
|
Loading…
Reference in New Issue