我已经尝试让一个函数使用递归计算字符串中的每个字符,现在已经有两天了。我试着写一些伪代码,但我不能真正实现它
伪码:
编写一个函数,将文本作为参数
为每个元素设置一个计数器
使用关键字为元素中的每个字符设置一个结果值
基本情况:如果我们只有1个字符串,那么返回字符和字符串
else返回函数-1,直到最后一个元素被击中为止。
var tekst = "We have to count strings";
function countStrings(tekst) {
var count = 0
var result = {}
if (count > tekst.lentgh) {
count++
return result
} else {
return countStrings(tekst-1)
}
}
console.log(countStrings(tekst))
考虑使用以下逻辑:
var tekst = "We have to count strings";
function countStrings(tekst) {
if (tekst.length == 0) {
return 0;
}
return 1 + countStrings(tekst.substring(1));
}
console.log(countStrings(tekst))
这里的方法是,在递归的每一步,返回1加上从下一个字符开始的子字符串的长度。也就是说,我们向下递归输入字符串,一次一个字符,构建长度。这里的基本情况发生在countStrings()
的输入恰好是空字符串时。在这种情况下,我们只返回0,并停止递归调用。
我决定尝试这个问题,这就是我想到的。这绝对是一个具有挑战性的问题,所以如果你没有得到它,不要感到难过:
var countStrings = function(tekst) {
if (tekst.length === 0) return {};
var obj = countStrings(tekst.slice(1));
if (obj[tekst[0]]) {
obj[tekst[0]] += 1;
} else {
obj[tekst[0]] = 1;
}
return obj;
};