leetcode記錄——每個(gè)元音包含偶數(shù)次的最長(zhǎng)子字符串

比較巧妙的一道題,是練習(xí)位操作的不錯(cuò)的題目,解題思路很是,若兩數(shù)相減為偶,則兩數(shù)同奇或同偶,奇偶性質(zhì)的記錄可以用異或操作可以表示,另外用一個(gè)hash表來(lái)表示各種奇偶情況對(duì)應(yīng)的最短的子字符串長(zhǎng)度,然后在下一次出現(xiàn)相同奇偶情況時(shí),去減去相對(duì)應(yīng)的最短子字符串長(zhǎng)度,這樣就可以保證減出來(lái)的結(jié)果中,每個(gè)元音都出現(xiàn)偶數(shù)次了,然后把其中長(zhǎng)度最長(zhǎng)的return出來(lái)即可,代碼:

class Solution {

public:

? ? int findTheLongestSubstring(string s) {

? ? ? ? vector<int> record_list(32, -2);

? ? ? ? int status = 0, result = 0;

? ? ? ? record_list[0] = -1;

? ? ? ? for (int i = 0; i < s.length(); i ++) {

? ? ? ? ? ? if (s[i] == 'a')

? ? ? ? ? ? ? ? status ^= 1 << 0;

? ? ? ? ? ? if (s[i] == 'e')

? ? ? ? ? ? ? ? status ^= 1 << 1;

? ? ? ? ? ? if (s[i] == 'i')

? ? ? ? ? ? ? ? status ^= 1 << 2;

? ? ? ? ? ? if (s[i] == 'o')

? ? ? ? ? ? ? ? status ^= 1 << 3;

? ? ? ? ? ? if (s[i] == 'u')

? ? ? ? ? ? ? ? status ^= 1 << 4;

? ? ? ? ? ? if (record_list[status] >= -1)

? ? ? ? ? ? ? ? result = max(result, i - record_list[status]);

? ? ? ? ? ? else

? ? ? ? ? ? ? ? record_list[status] = i;

? ? ? ? }

? ? ? ? return result;

? ? }

};

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容