一个数组的最大子串和

给出一个int类型的数组,如

-2,-4,-7,-20,1,1,1,1,-10,1,1,1,5,-10,10,10,10,-25,10,10,10,10,10,10,-300

这个数组的每个子串值相比较,很明显,最大的是由 10 10 10 -25 10 10 10 10 10 10组成的值为65的值。然后我们有两种方法具体实现,

第一种,它是On2)方级的,这种就和九九乘法表一样,用第一个子串去挨个的与其他的子串求和,然后在用第二个子串与剩余的子串求和,以此类推,然后在比较出来最大的那个值是多少,子串是多少,这种虽然想起来很简单,但是计算机实现就不是

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用 JS 后缀数组方法实现遍历主串所有子串并返回重复子串和重复次数的代码: ```javascript function findRepeatSubstr(str) { let suffixArr = buildSuffixArray(str); // 构建后缀数组 let maxRepeatCount = 0; // 最大重复次数 let repeatSubstrs = new Set(); // 重复子串集合 for (let i = 0; i < suffixArr.length - 1; i++) { let j = i + 1; let repeatCount = 0; // 当前重复次数 // 比较相邻后缀 while (suffixArr[i].startsWith(suffixArr[j]) || suffixArr[j].startsWith(suffixArr[i])) { repeatCount++; j++; // 更新最大重复次数和重复子串集合 if (repeatCount > maxRepeatCount) { maxRepeatCount = repeatCount; repeatSubstrs.clear(); repeatSubstrs.add(suffixArr[i].substring(0, repeatCount)); } else if (repeatCount === maxRepeatCount) { repeatSubstrs.add(suffixArr[i].substring(0, repeatCount)); } } } return { repeatSubstrs: Array.from(repeatSubstrs), maxRepeatCount }; } // 构建后缀数组 function buildSuffixArray(str) { let suffixes = []; for (let i = 0; i < str.length; i++) { suffixes.push(str.slice(i)); } suffixes.sort(); let suffixArr = suffixes.map(suffix => str.length - suffix.length + 1); return suffixArr; } ``` 该函数接受一个字符串作为参数,并返回一个对象,包含重复子串和重复次数。其中,重复子串数组形式返回,重复次数为一个整数。 例如,对于字符串 `"banana"`,调用 `findRepeatSubstr("banana")` 将返回以下结果: ```javascript { repeatSubstrs: ['an'], maxRepeatCount: 2 } ``` 表示字符串中有一个重复子串 `"an"`,重复了两次。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值