leetcode day 1
題目**
給你乙個字串 s ,請你返回滿足以下條件的最長子字串的長度:每個母音字母,即 『a』,『e』,『i』,『o』,『u』 ,在子字串中都恰好出現了偶數次。
示例 1:
輸入:s = 「eleetminicoworoep」
輸出:13
解釋:最長子字串是 「leetminicowor」 ,它包含 e,i,o 各 2 個,以及 0 個 a,u 。
示例 2:
輸入:s = 「leetcodeisgreat」
輸出:5
解釋:最長子字串是 「leetc」 ,其中包含 2 個 e 。
示例 3:
輸入:s = 「bcbcbc」
輸出:6
解釋:這個示例中,字串 「bcbcbc」 本身就是最長的,因為所有的母音 a,e,i,o,u 都出現了 0 次。
1 <= s.length <= 5 x 10^5
s 只包含小寫英文本母。
題解:題目中對五個母音字母的出現次數作出了限制,必須為偶數,而出現次數只有兩種狀態,奇數和偶數,我們可以很容易的聯想到0和1,那麼對應的5個母音字母可以轉換為二進位制的五位數00000,每一位對應著乙個母音字母的出現次數,0為偶數,1為奇數,共有1<<5中狀態。
要獲取最長子字串,只需要每個狀態第一次出現時的字首的下標i,當再次碰到這個狀態時,下標記為j,由奇數減奇數必為偶數,偶數減偶數必為偶數可知,介於兩者之間的字串必滿足條件,j-i即為當前字串在這個狀態下符合條件的最長子串,將這個長度j-i與當前最長子串長度比較,大於則更新
**如下:
class
solution
//map的每一位初始化為-1,即1111,用~進行按位取反時,得0
//所以第一次出現某個狀態時必為不滿足條件,此時記錄第一次出現該狀態時的位置
//當再次出現該狀態時,由奇數-奇數必為偶數,偶數減偶數必為偶數的道理可知,兩者之間的字串必滿足條件
//此時將新出現的滿足條件的子字串長度與現存的符合條件的最長子串長度進行比較,大於則更新if(
~map[cur]
)else
}return res;}}
;
小白理解,如有不對的地方,請指出,謝謝。 Day1刷題總結
如果進棧序列為e1,e2,e3,e4,則不可能的出棧序列是 d a.e2,e4,e3,e1 b.e4,e3,e2,e1 c.e1,e2,e3,e4 d.e3,e1,e4,e2 解析 對於a,進棧的順序是先把e1,e2進棧,再把e2出棧,再將e3,e4進棧,這時棧按順序剩下e1,e3,e4,出棧的順序...
刷題要緊 DAY 5 23
leetcode 題目 給定乙個字串,請你找出其中不含有重複字元的 最長子串 的長度。輸入 abcabcbb 輸出 3 解釋 因為無重複字元的最長子串是 abc 所以其長度為 3。輸入 bbbbb 輸出 1 解釋 因為無重複字元的最長子串是 b 所以其長度為 1。輸入 pwwkew 輸出 3 解釋 ...
leetcode刷題之旅(day1)
給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,你不能重複利用這個陣列中同樣的元素。示例 給定 nums 2,7,11,15 target 9 因為 nums 0 nums 1 2 ...