2012-12-09 148 views
0

我想在這裏解決這個問題我自己: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); 
} 

我想知道如何溫度的計算= I + J-1完成?如何在紙上或通過例子他可以得到這個等式。我嘗試了很多,但我無法得到它。

+0

*「我想知道如何計算temp = i + j-1?」*推測你的意思是你想知道程序員如何選擇這種計算?因爲*「如何完成」*是通過添加'i'和'j',減去1並將結果賦給'temp'。 – dmckee

+0

如果我想要第二個循環從i + 1而不是i去。如何改變計算? – Andre

回答

1

它只是子字符串的長度,其中i和j分別是子字符串的左右邊界。如果我們在從x到y的線上有一段,那麼它的長度就是y - x。因爲我們在這裏有一個離散的對象,所以長度可以變化1或2.這裏,當我們採用閉合邊界時,在位置i開始和結束的子串的長度將是1 = i - i + 1,所以公式應該是j-i + 1.

+0

請給我一個插圖:)。我是小白。 – Andre

+0

https://www.dropbox.com/s/l518cjht6z8xapn/snapshot.png 這樣的視覺描述是否清晰? – Victor