0
我有一些锻炼的问题。 我必须找到最长的子字符串。Ocaml最长的子串
例子:
"AGATGCCATTGTCCCCGACAACCAGCCA"
这我倒要转变成列表,找到最长的串/搜索和打印结果CCCC
我的功能必须是这样的function search : char list -> unit
而且我不能使用Module Str。
我有一些锻炼的问题。 我必须找到最长的子字符串。Ocaml最长的子串
例子:
"AGATGCCATTGTCCCCGACAACCAGCCA"
这我倒要转变成列表,找到最长的串/搜索和打印结果CCCC
我的功能必须是这样的function search : char list -> unit
而且我不能使用Module Str。
不确定此答案是否合适。我相信我应该给一个提示。
回想一下在数组中寻找最大值的迭代算法。
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
变量在每一个递归调用“改变”,就像在重复突变变量。 当然这不是惯用的方式,因为递归可以用List.fold_left
完成。
如果你真的不知道如何“递归思考”,试着想出一个带循环的算法,并将其“转化”为递归。
“AGATGCCATTGTCCCCGACAACCAGCCA”的最长子串是“AGATGCCATTGTCCCCGACAACCAGCCA”。 – melpomene
你有什么想法解决这个问题?你有没有编写任何(伪)代码来解决它?如果是这样,请向我们展示并解释您为什么认为它不起作用。显然,你不希望SO评论者只为你回答你的作业,对吧? –
呵呵,对,不,Iam仍在尝试自己,但我卡住了。我有一些想法,但我不知道如何实现它。我想用“匹配”功能和一些变量来保存当前最长的数字和字符串。但后来我无法计算它或我该怎么办如果我发现一些更长的子字符串,如何重置前一个。谢谢! –