日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

1371. Find the Longest Substring Containing Vowels in Even Counts

發(fā)布時(shí)間:2024/5/7 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 1371. Find the Longest Substring Containing Vowels in Even Counts 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Title

給你一個(gè)字符串 s ,請(qǐng)你返回滿足以下條件的最長子字符串的長度:每個(gè)元音字母,即 ‘a(chǎn)’,‘e’,‘i’,‘o’,‘u’ ,在子字符串中都恰好出現(xiàn)了偶數(shù)次。

示例 1:

輸入:s = “eleetminicoworoep”
輸出:13
解釋:最長子字符串是 “l(fā)eetminicowor” ,它包含 e,i,o 各 2 個(gè),以及 0 個(gè) a,u 。

示例 2:

輸入:s = “l(fā)eetcodeisgreat”
輸出:5
解釋:最長子字符串是 “l(fā)eetc” ,其中包含 2 個(gè) e 。

示例 3:

輸入:s = “bcbcbc”
輸出:6
解釋:這個(gè)示例中,字符串 “bcbcbc” 本身就是最長的,因?yàn)樗械脑?a,e,i,o,u 都出現(xiàn)了 0 次。

Solve

前綴和+狀態(tài)壓縮

先來考慮最容易想到的暴力方法:枚舉所有子串,遍歷子串中的所有字符,統(tǒng)計(jì)元音字母出現(xiàn)的個(gè)數(shù),如果符合條件就更新答案,不用想都知道這樣肯定超時(shí)。

其實(shí)每個(gè)子串對(duì)應(yīng)著一個(gè)區(qū)間,那么有什么方法可以在不重復(fù)遍歷子串的前提下,快速求出這個(gè)區(qū)間里元音字母出現(xiàn)的次數(shù)呢?答案就是前綴和,對(duì)于一個(gè)區(qū)間,可以用兩個(gè)前綴和的差值,得到其中某個(gè)字母出現(xiàn)次數(shù)。

對(duì)每個(gè)元音字母維護(hù)一個(gè)前綴和,定義pre[i][k]表示在字符串前i個(gè)字符中,第k個(gè)元音字母一共出現(xiàn)的次數(shù)。

假設(shè)我們需要求出[l,r]這個(gè)區(qū)間的子串是否滿足條件,那么我們可以用pre[r][k]-pre[l-1][k],在O(1)的時(shí)間得到第k個(gè)元音字母出現(xiàn)的次數(shù),對(duì)于每個(gè)元音字母都判斷一下其是否出現(xiàn)偶數(shù)次即可。

利用前綴和優(yōu)化了統(tǒng)計(jì)子串的時(shí)間復(fù)雜度,然而枚舉所有子串的復(fù)雜度仍需要O(n2),還是不足以通過本題,還需要繼續(xù)進(jìn)行優(yōu)化,避免枚舉所有子串。

考慮枚舉字符串的每個(gè)位置i,計(jì)算以它結(jié)尾的滿足條件的最長字符串長度。其實(shí)我們要做的就是快速找到最小的j∈[0,i),滿足pre[i][k]?pre[j][k]均為偶數(shù),那么以i結(jié)尾的最長字符串s[j+1,i]長度就是i-j。

但是單單利用前綴和,還是無法找到i和j相關(guān)的恒等式。這道題還有一個(gè)性質(zhì)沒有充分利用:目標(biāo)子串中,每個(gè)元音字母都恰好出現(xiàn)了偶數(shù)次。

偶數(shù)這個(gè)條件其實(shí)告訴了我們,對(duì)于滿足條件的子串,兩個(gè)前綴和pre[i][k]和pre[j][k]的奇偶性一定是相同的,因此我們可以對(duì)前綴和稍作修改,從維護(hù)元音字母出現(xiàn)的次數(shù)改作維護(hù)元音字母出現(xiàn)次數(shù)的奇偶性。

這樣我們只要實(shí)時(shí)維護(hù)每個(gè)元音字母出現(xiàn)的奇偶性,那么s[j+1,i]滿足條件當(dāng)且僅當(dāng)對(duì)于所有的k,pre[i][k]和pre[j][k]的奇偶性都相等,此時(shí)我們就可以利用哈希表存儲(chǔ)每一種奇偶性對(duì)應(yīng)最早出現(xiàn)的位置,邊遍歷邊更新答案。

其實(shí)到這里就差不多了,但是還可以進(jìn)一步優(yōu)化編碼方式,如果直接以每個(gè)元音字母出現(xiàn)次數(shù)的奇偶性為哈希表中的鍵難免有些冗余,因此可以額外定義一個(gè)狀態(tài):

{a: cnta, // a 出現(xiàn)次數(shù)的奇偶性e: cnte, // e 出現(xiàn)次數(shù)的奇偶性i: cnti, // i 出現(xiàn)次數(shù)的奇偶性o: cnto, // o 出現(xiàn)次數(shù)的奇偶性u(píng): cntu // u 出現(xiàn)次數(shù)的奇偶性 }

將這么一個(gè)結(jié)構(gòu)當(dāng)做哈希表存儲(chǔ)的鍵值,如果題目稍作修改擴(kuò)大了字符集,那么維護(hù)起來可能會(huì)比較吃力??紤]到出現(xiàn)次數(shù)的奇偶性無非就兩個(gè)值,0代表出現(xiàn)了偶數(shù)次,1代表出現(xiàn)了奇數(shù)次,我們可以將其壓縮到一個(gè)二進(jìn)制數(shù)中,第k位的0或1代表了k個(gè)元音字母出現(xiàn)的奇偶性,這樣我們也不需要使用哈希表,直接用一個(gè)長度為32的數(shù)組來存儲(chǔ)對(duì)應(yīng)狀態(tài)出現(xiàn)的最大位置即可。

為什么用 0 表示偶數(shù)?1 表示奇數(shù)?

因?yàn)檫@里我們打算用異或運(yùn)算,而異或的性質(zhì)是:如果對(duì)兩個(gè)二進(jìn)制做異或,會(huì)對(duì)其每一位進(jìn)行位運(yùn)算,如果相同則為 0,否則為 1。這和上面的性質(zhì)非常相似。上面說奇偶性相同則位偶數(shù),否則為奇數(shù)。因此很自然地用 0 表示偶數(shù),1 表示奇數(shù)會(huì)更加方便。

復(fù)雜度分析

  • 時(shí)間復(fù)雜度:O(n)
    其中 n 為字符串 s 的長度。我們只需要遍歷一遍字符串即可求得答案,因此時(shí)間復(fù)雜度為 O(n)。

  • 空間復(fù)雜度:O(S)
    其中 S 表示元音字母壓縮成一個(gè)狀態(tài)數(shù)的最大值,在本題中 S = 32。我們需要對(duì)應(yīng) S 大小的空間來存放每個(gè)狀態(tài)第一次出現(xiàn)的位置,因此需要 O(S) 的空間復(fù)雜度。

  • Code

    def findTheLongestSubstring(self, s: str) -> int:mapper = {'a': 1, 'e': 2, 'i': 4, 'o': 8, 'u': 16}seen = {0: -1}res = cur = 0for i in range(len(s)):if s[i] in mapper:cur ^= mapper.get(s[i])if cur in seen:res = max(res, i - seen.get(cur))else:seen[cur] = ireturn res

    總結(jié)

    以上是生活随笔為你收集整理的1371. Find the Longest Substring Containing Vowels in Even Counts的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 东方成人av| av先锋资源网 | 成人性生交大片免费看 | 九九九视频在线观看 | 1024金沙人妻一区二区三区 | 99久久一区二区 | 国产精品久久久久久亚洲av | 亚洲精品国产手机 | 国产精品30p| 久久亚洲在线 | 青青草原在线免费观看视频 | 精品亚洲一区二区三区四区五区 | 欧洲成人av | 欧美性在线观看 | 香蕉视频黄版 | 欧美性猛交xxxx乱大交hd | 苍井空亚洲精品aa片在线播放 | 婷婷6月天 | 少妇av一区二区三区 | 欧美黑人多人双交 | 9色在线视频 | 久久香焦 | 美景之屋电影免费高清完整韩剧 | 成年人免费网 | 狠狠ri| 91拔萝卜视频 | ass日本粉嫩pics珍品 | 日韩精品在线观看一区二区三区 | 日韩精品无码一区二区三区 | 欧美永久 | 日本人体视频 | 91丝袜国产在线观看 | 日本一区中文 | 久久综合一区二区 | 婷婷俺也去 | 中文字幕 国产 | 亚洲动漫精品 | 国产在线精 | 黄色av日韩| 国产交换配乱淫视频免费 | 草逼免费视频 | 91精品国产乱码久久久久久久久 | 在线污视频 | 亚洲免费色图 | 免费黄网在线看 | 国内精品视频一区 | 91伊人久久 | 这里有精品 | 强开小嫩苞一区二区三区网站 | 中日韩精品在线 | 91成人天堂久久成人 | 欧美黄色免费视频 | 亚洲精品在线免费播放 | 免费人成视频在线 | 欧美操女人 | 四虎成人精品在永久免费 | 一级黄在线观看 | 国产男女猛烈无遮挡免费视频 | 最新中文字幕2019 | 久久久久麻豆 | 日韩av电影手机在线观看 | 男插女青青影院 | 日韩六九视频 | 日本一区二区三区视频免费看 | 中国国产bdsm紧缚捆绑 | 午夜精品久久久久久久久久蜜桃 | 午夜av电影在线观看 | 亚洲国产一区二区三区在线观看 | 精品一区二区久久久久久久网站 | 免费人成又黄又爽又色 | 精品一区二区三区精华液 | 久色影视 | 波多野结衣不卡视频 | 涩涩视频软件 | 欧美1314| 亚洲爽爆av| 综合网亚洲 | 欧美性猛交7777777 | 日本精品一区二区 | 日韩av影音先锋 | 在线观看网站 | 天堂av在线网 | 日本成人网址 | 少妇精品无码一区二区 | 好色婷婷| 日韩免费高清视频网站 | 亚洲免费在线观看视频 | 国产三级理论片 | 51国产在线 | 天堂在线一区二区 | 国产大片一区二区三区 | 日本美女逼 | 欧美大片高清免费观看 | 操操网 | 美女扒开下面让男人捅 | 久久福利电影 | 红桃视频一区二区三区免费 | 波多av | 成人午夜影视在线观看 |