String 计算不带循环或递归的字符串的所有子字符串中的字符总数

String 计算不带循环或递归的字符串的所有子字符串中的字符总数,string,String,类似于ADAM的字符串具有以下子字符串 A AD ADA ADAM D DA DAM A AM M 要计算子字符串的总数,我可以执行如下的O(1)操作ADAM->10 function calcNumSubstrings(strlen) { return (strlen * (strlen + 1) / 2); } 我需要的是所有这些子字符串中所有字符的总和。在ADAM的情况下,这是20。为了得到这个,我可以做一个O(N)操作,如下所示: function calcTotalLetter

类似于
ADAM
的字符串具有以下子字符串

A
AD
ADA
ADAM
D
DA
DAM
A
AM
M
要计算子字符串的总数,我可以执行如下的O(1)操作
ADAM->10

function calcNumSubstrings(strlen) {
  return (strlen * (strlen + 1) / 2);
}
我需要的是所有这些子字符串中所有字符的总和。在
ADAM
的情况下,这是
20
。为了得到这个,我可以做一个O(N)操作,如下所示:

function calcTotalLettersInAllSubstrings(strlen) {
  let total = 0;
  for (let i = 1; i <= strlen; i++) {
    total += calcNumSubstrings(i);
  }
  return total;
}
函数calctotallettersinallsubstring(strlen){
设total=0;

对于(设i=1;i一般情况为:
n*(n+1)*(n+2)/6

其中
n
是字符串中的字符数


所以在这种情况下,字符数是4:
4*(4+1)*(4+2)/6=20
一般情况是:
n*(n+1)*(n+2)/6

其中
n
是字符串中的字符数


因此,在本例中,字符数为4:
4*(4+1)*(4+2)/6=20
只要做一些数学运算。让n为字符串的长度,让sum(expr)为给定表达式的r=1到r=n的和,那么对于给定的子字符串长度r,您有(n+1-r)个可能的子字符串,因此:

sum(r(n+1-r)) = (n+1)sum(r) - sum(r^2)
现在参考标准级数和,它给出:

sum(r) = n(n+1)/2 

sum(r^2) = n(n+1)(2n+1)/6
因此:

sum(r(n+1-r)) = n(n+1)^2 / 2 - n(n+1)(2n+1)
检查n=4

sum(r(5-r)) = 50 - 30 = 20
简化此表达式可得到:

sum(r(n+1-r)) = n(n+1)/2( (n+1) - (2n+1)/3)
              = n(n+1)/6( 3n+3 -2n -1)
              = n(n+1)(n+2)/6

如上所述,只需做一些数学运算。设n为字符串的长度,设sum(expr)为给定表达式的r=1到r=n的和,则对于给定的子字符串长度r,您有(n+1-r)个可能的子字符串,因此:

sum(r(n+1-r)) = (n+1)sum(r) - sum(r^2)
现在参考标准级数和,它给出:

sum(r) = n(n+1)/2 

sum(r^2) = n(n+1)(2n+1)/6
因此:

sum(r(n+1-r)) = n(n+1)^2 / 2 - n(n+1)(2n+1)
检查n=4

sum(r(5-r)) = 50 - 30 = 20
简化此表达式可得到:

sum(r(n+1-r)) = n(n+1)/2( (n+1) - (2n+1)/3)
              = n(n+1)/6( 3n+3 -2n -1)
              = n(n+1)(n+2)/6

如上所述

@WaldoBronchart,别忘了标记为已回答!:)老实说,我知道足够多的代数知识,可以将每个块内的除以2简化为外部块上的一个除法-之后,我只是快速查找这些项的序列是如何求和的!接受@4thamigo_uk的答案,因为它涉及到“级数和”的一般问题。谢谢你的帮助。@WaldoBronchart,没问题。我想这是英国第四大商学院应得的!:)@WaldoBronchart,别忘了按回答做标记!:)说实话,我知道足够多的代数知识,可以将每个块内的除2简化为外部块上的一个除-之后,我很快就查到了序列是如何计算的这些术语的数量是总和!接受了@4thamigo_-uk的答案,因为它涉及到“级数之和”的一般问题。谢谢你的帮助。@WaldoBronchart,没问题。我认为4thamigo_-uk赢得了它!:)