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 に答える