0

我想自己解决这里的问题:在C++中找到左右和的最长子串

代码在这里

int getEqualSumSubstring(string s) {
    int i=0,j=i,foundLength=0;
    for(i=0;i<s.length();i++)
    {
        for(j=i;j<s.length();j++)
        {
            int temp = j-i+1;

            if(temp%2==0)
            {
                int leftSum=0,rightSum=0;
                string tempString=s.substr(i,temp);
                // printf("%d ",tempString.length());
                for(int k=0;k<temp/2;k++)
                {
                    leftSum=leftSum+tempString[k]-48;
                    rightSum=rightSum+tempString[k+(temp/2)]-48;
                }
                if((leftSum==rightSum)&&(leftSum!=0))
                    if(tempString.length()>foundLength)
                    foundLength=tempString.length(); 
            }
        }
    }
    return(foundLength);
}

我想知道 temp = i+j-1 的计算是如何完成的?他如何在纸上或通过例子得到这个等式。我尝试了很多,但我无法得到它。

4

1 回答 1

1

它只是子串的长度,其中 i 和 j 分别是子串的左右边界。如果我们在从 x 到 y 的直线上有一段,x < y,那么它的长度是 y - x。因为我们这里有一个离散对象,所以长度可以变化 1 或 2。这里,由于我们采用封闭边界,在位置 i 开始和结束的子串的长度将是 1 = i - i + 1,所以公式应该是 j - i + 1。

于 2012-12-09T18:39:00.207 回答