了解算法解决方案

时间:2012-12-09 18:26:20

标签: c++ algorithm

我想自己解决这个问题:To find the longest substring with equal sum in left and right in 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?如何在纸上或通过例子他可以得到那个等式。我尝试了很多,但我无法得到它。

1 个答案:

答案 0 :(得分:1)

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