給定只含01的字串,找出最長平衡子串的長度(平衡串:包含0和1的個數相同),串長最大10^6
乙個字串,只包含01,長度不超過1000000
一行乙個整數,最長的0與1的個數相等的子串的長度。
2018北郵的壓軸題,想了蠻久的,個人認為主要的點在於,我們可以將0換成-1,然後求字首和陣列dp
,這樣當dp[
i]==
dp[j
]dp[i]==dp[j]
dp[i]=
=dp[
j]的時候,dp[
i+1]
−dp[
j]
dp[i+1]-dp[j]
dp[i+1
]−dp
[j]這個區域內肯定是乙個平衡子串,那麼問題就變成了求dp[
i]==
dp[j
]dp[i]==dp[j]
dp[i]=
=dp[
j]時j −i
j-ij−
i的最大值。我們只需要用乙個map,記錄所有dp[
k]
dp[k]
dp[k
]首次出現的位置,再找到乙個dp[
i]==
dp[k
]∣
i>
kdp[i]==dp[k]|i>k
dp[i]=
=dp[
k]∣i
>
k時,二者維護的最長平衡字串長度為i−k
i-ki−
k。
int
main()
int res =0;
for(
int i =
1; i < s.
size()
; i++
) cout << res << endl;
}}
2023年北京郵電大學機試題目
趁著現在還記得趕快寫下來,個人回憶版 計算機學院機試題目 第一題 題目描述 輸入32位的二進位制01串,輸出這個數 1和 3後的32位二進位制串 輸入描述 先輸入t,表示輸入的組數 然後輸入t行二進位制串 輸出描述 輸出 1和 3後的二進位制串 輸入樣例 2000000000000000000000...
矩陣冪 北京郵電大學複試機試題
給定乙個n n的矩陣,求該矩陣的k次冪,即p k。第一行 兩個整數n 2 n 10 k 1 k 5 兩個數字之間用乙個空格隔開,含義如上所示。接下來有n行,每行n個正整數,其中,第i行第j個整數表示矩陣中第i行第j列的矩陣元素pij且 0 pij 10 另外,資料保證最後結果不會超過10 8。對於每...
北京郵電大學18年網研真題
problemb v字型數列,當且僅當三元組ia j 並且a k a j 算作乙個v型數列。輸入第一行為測試資料組數t 每組資料第一行為該陣列的數字個數 接下來一行為陣列元素 輸出 輸出對應陣列中符合v字形數列的個數 測試資料 2 1 2 2 1 2 1 2 輸出 include include i...