我正在尝试制作一个函数:
由于输出只是:“thisis_”,而不是像这样的最长公共子序列:“thisis_a_string123”,所以它与以下内容不同: https://rosettacode.org/wiki/Longest_common_subsequence
并且: Getting the longest common subsequence in ERLANG
任何帮助将不胜感激,谢谢!!
答案 0 :(得分:2)
根据我的理解,您需要最长的常见前缀,而不是子字符串。这可以通过首先定义一个与2个列表一起使用的函数来完成:
lcp([X | XS], [X | YS]) ->
[X | lcp(XS, YS)];
lcp(_, _) ->
[].
然后使用lists:foldl
将其应用于列表列表:
lcp([X | XS]) ->
lists:foldl(fun lcp/2, X, XS).
1> a:lcp(["thisis_a_string123", "thisis_a_nother_string123", "thisis_not_a_string123"]).
"thisis_"
2> a:lcp(["thisis_a_string123", "thisis_a_nother_string123", "thisis_not_a_string123", "xyz"]).
[]
答案 1 :(得分:0)
对于任意数量的字符串:
lcp([]) -> [];
lcp([S]) -> S;
lcp(L) -> lcp_(L).
lcp_([[H|T]|R]) ->
case strip(H, R, []) of
false -> [];
Ts -> [H|lcp_([T|Ts])]
end.
strip(_, [], Ts) -> Ts;
strip(H, [[H|T]|R], Ts) -> strip(H, R, [T|Ts]);
strip(_, _, _) -> false.