基準時間限制:1 秒 空間限制:131072 kb 分值: 20 難度:3級演算法題
給定乙個0-1串,請找到乙個盡可能長的子串,其中包含的0與1的個數相等。
input
乙個字串,只包含01,長度不超過1000000。
output
一行乙個整數,最長的0與1的個數相等的子串的長度。
input示例
output示例
思路:01相等的子串會出現在前端、中端、或後端,這裡中端和後端是一種情況。這裡用了字首和的思想。sum記錄0、1個數的差值,符合題意的一定sum=0。如果出現在前端,那麼從i=0遍歷到sum=0,就是結果。如果出現在中端或後端,相等子串的開頭前面那個位置和結尾的那個位置的sum一定是一樣的,我們用map[sum]記錄第一次出現的sum的下標,當sum相同時即出現了相同子串,更新最大長度。
#include#include#include#includeusing namespace std;
char str[1000005];
mapm;
int main()
else//出現相同的sum,中間一定為相等子串,取最大值
maxn=max(maxn,i-m[sum]);
} printf("%d\n",maxn);
return 0;
}
51Nod 1393 0和1相等串
1393 0和1相等串 基準時間限制 1 秒 空間限制 131072 kb 分值 20 難度 3級演算法題 給定乙個0 1串,請找到乙個盡可能長的子串,其中包含的0與1的個數相等。input 乙個字串,只包含01,長度不超過1000000。output 一行乙個整數,最長的0與1的個數相等的子串的長...
51nod 1393 0和1相等串
給定乙個0 1串,請找到乙個盡可能長的子串,其中包含的0與1的個數相等。input 乙個字串,只包含01,長度不超過1000000。output 一行乙個整數,最長的0與1的個數相等的子串的長度。input示例 1011output示例 2 準備乙個sum,如果碰到0則 1,碰到1則 1.對於每乙個...
51Nod 1393 0和1相等串
題目 給定乙個0 1串,請找到乙個盡可能長的子串,其中包含的0與1的個數相等。輸入 乙個字串,只包含01,長度不超過1000000。輸出 一行乙個整數,最長的0與1的個數相等的子串的長度。樣例輸入 1011樣例輸出 2分析 使用字首和,字首和pre i val表示01字串前i個字元中,1的數量 0的...