String Ocaml最长子串

String Ocaml最长子串,string,module,char,substring,ocaml,String,Module,Char,Substring,Ocaml,我在运动方面有问题。 我必须找到最长的子串 例如: 我必须将其转换为列表,查找/搜索最长的子字符串并打印结果CCCC 我的函数必须是这样的函数搜索:char list->unit 我不能使用模块Str.不确定这个答案是否合适。我想我应该给你一个暗示 回想一下寻找数组中最大数的迭代算法 int maximum = array[0]; for (i = 1; i < length; i++){ if (array[i] > maximum){ maximum =

我在运动方面有问题。 我必须找到最长的子串

例如:

我必须将其转换为列表,查找/搜索最长的子字符串并打印结果
CCCC

我的函数必须是这样的
函数搜索:char list->unit


我不能使用模块Str.

不确定这个答案是否合适。我想我应该给你一个暗示

回想一下寻找数组中最大数的迭代算法

int maximum = array[0];
for (i = 1; i < length; i++){
    if (array[i] > maximum){
        maximum = array[i];
    }
}
注意
maximum
变量在每次递归调用中是如何“更改”的,就像迭代中的变异变量一样。 当然,这不是惯用的方法,因为递归可以通过
List.fold\u left
完成


如果你真的不知道如何“递归思考”,试着先用循环提出一个算法,然后把它“翻译”成递归。

agatgcattgtccgacaacagcca的最长子串是
agatgcattccccccgacaagcca
。你有什么办法解决这个问题?你有没有写过(伪)代码来解决这个问题?如果是这样,请向我们展示它,并解释为什么您认为它不起作用。很明显,你不想让评论员帮你回答作业,对吗?呵呵,对,不,我还在努力,但我被卡住了。我有一些想法,但我不知道是怎么实现的。我正在考虑使用“match with”函数和一些变量来保存当前最长的数字和字符串。但是我无法计算它,或者如果我发现一些更长的子字符串,我该怎么做,如何重置前一个。谢谢
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