Ocaml最长的子串

时间:2015-09-05 12:46:31

标签: string module char substring ocaml

我有一些运动有问题。 我找到了最长的子串。

示例:

"AGATGCCATTGTCCCCGACAACCAGCCA"

我必须转换为List并查找/搜索最长子字符串并打印结果CCCC

我的功能必须与function search : char list -> unit

相似

我无法使用 Module Str

1 个答案:

答案 0 :(得分:0)

不确定这个答案是否合适。我相信我应该暗示一下。

回想一下迭代算法,找出数组中的最大数。

int maximum = array[0];
for (i = 1; i < length; i++){
    if (array[i] > maximum){
        maximum = array[i];
    }
}

要将代码转换为递归代码,我们不会随着时间的推移改变值,但在下一次调用中会有不同的参数。

let max_in_list =
let rec aux maximum l = match l with
    |[] -> maximum
    |x :: xs -> aux (max maximum x) xs in
function
    |[] -> invalid_arg "empty list"
    |x :: xs -> aux x xs

注意maximum变量是如何改变的#34;在每次递归调用中,就像迭代中的变异变量一样。 当然,这不是惯用的方式,因为可以使用List.fold_left来完成递归。

如果你真的不知道如何以递归方式思考&#34;,请先尝试用循环算法,然后&#34;翻译&#34;它进入递归。