狀態壓縮 位運算 最大字首和 hash

2021-10-06 08:15:10 字數 936 閱讀 9428

題目:給你乙個字串 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 次。

分析:從題目給出的條件以及提示中可以看到,要求的是求子字串的母音字母最優解,以及只能出現偶數這時應該想到位運算的異或

用乙個state狀態用位運算來記錄不同的母音出現的次數,如果偶數則抵消之前的值。再用map儲存記錄的state以及下標

**如下:

class

solution}if

(map.

containskey

(state)

) map.

putifabsent

(state, i);}

return maxsize;

}}

說明:putifabsent(int key,int value);查詢key值是否存在,如果存在則拿出之前存在的值,如果不存在則覆蓋。

純個人記錄學習。

hdu1429位運算狀態壓縮

第一次接觸位運算的狀態壓縮,這題本來我是用優先佇列寫的,用vector儲存鑰匙。本來以為會超時,沒想到是記憶體超限。無奈,找大神,發現正確姿勢是狀態壓縮。這題用來學 位運算的狀態壓縮是相當不錯,很好理解。題意是乙個人在乙個迷宮裡逃生,迷宮有鎖,有鑰匙,相應的鑰匙開相應的鎖。共有10種鎖。利用位運算就...

狀態壓縮DP之位運算總結

介紹 在進行dp題目分析時,針對狀態或子狀態可以抽象為 0 1 排列組合的題目時,將其 0 1 序列轉化為二進位制數,再而轉換為十進位制數,可以更加便捷的對其進行資料分析處理,減少因為混亂所造成的一些不必要的錯誤。魔鬼往往藏在細節之中。常用運算子 都是十進位制數在二進位制下所做的運算,返回十進位制的...

zoj 2297 DP 位運算狀態壓縮

越來越覺得位運算好神啊。用位運算來儲存每個狀態 include include include include include include include include include include include include include include include includ...