給你乙個字串 s ,請你返回滿足以下條件的最長子字串的長度:每個母音字母,即 'a','e','i','o','u' ,在子字串中都恰好出現了偶數次。示例 1:
輸入:s = "eleetminicoworoep"
輸出:13
解釋:最長子字串是 "leetminicowor" ,它包含 e,i,o 各 2 個,以及 0 個 a,u 。
1.直接暴力,o(n³)
2.用字首和優化的暴力,o(n²),本質是空間換時間的做法
3.hash+狀態壓縮
1.用0/1表示每個字母的狀態(奇偶性),不需要是知道完成的出現次數
2.當乙個字母出現的時候用異或運算來更新,比如 aba,如開始時status=00000,然後到 a 的時候 00000 ^ 00001 = 00001,1 說明 a 出現奇數次
3.怎麼判斷某個區間內出現的字母是符合要求的?假如下標i的狀態status為 00011,下標j的狀態status也是00011,那麼[i,j]區間的子串符合要求
因為一定是經過了偶數次的操作才又恢復到了原來的status
4.什麼時候該更新res,當前的status在前面出現過的話就更新
class solution:
def findthelongestsubstring(self, s: str) -> int:
res=0
def func(s):
d=for i in s:
if i in d:d[i]+=1
for k,v in d.items():
if v%2!=0:return 0
return len(s)
for i in range(len(s)):
for j in range(i,len(s)):
res=max(res,func(s[i:j+1]))
return res
class solution:
def findthelongestsubstring(self, s: str) -> int:
res=0
p=tmp_count=
for i in range(len(s)):
if s[i] in tmp_count:tmp_count[s[i]]+=1
for i in range(len(s)):
for j in range(i,len(s)):
if i==0:
if sum([1 for k in range(5) if (p[j][k])%2!=0])==0:
res=max(res,j-i+1)
elif i!=0 and sum([1 for k in range(5) if (p[j][k]-p[i-1][k])%2!=0])==0:
res=max(res,j-i+1)
return res
class solution:
def findthelongestsubstring(self, s: str) -> int:
ans, status, n = 0, 0, len(s)
pos = [-1] * 32
pos[0] = 0
for i in range(n):
if s[i] == 'a':
status ^= 1 << 0
elif s[i] == 'e':
status ^= 1 << 1
elif s[i] == 'i':
status ^= 1 << 2
elif s[i] == 'o':
status ^= 1 << 3
elif s[i] == 'u':
status ^= 1 << 4
if pos[status] != -1:
ans = max(ans, i + 1 - pos[status])
else:
pos[status] = i + 1
return ans
1371 每個母音包含偶數次的最長子字串
給你乙個字串 s 請你返回滿足以下條件的最長子字串的長度 每個母音字母,即 a e i o u 在子字串中都恰好出現了偶數次。示例 1 輸入 s eleetminicoworoep 輸出 13 解釋 最長子字串是 leetminicowor 它包含 e,i,o 各 2 個,以及 0 個 a,u 示例...
1371 每個母音包含偶數次的最長子字串
給你乙個字串 s 請你返回滿足以下條件的最長子字串的長度 每個母音字母,即 a e i o u 在子字串中都恰好出現了偶數次。示例 1 輸入 s eleetminicoworoep 輸出 13 解釋 最長子字串是 leetminicowor 它包含 e,i,o 各 2 個,以及 0 個 a,u 示例...
1371 每個母音包含偶數次的最長子字串
給你乙個字串 s 請你返回滿足以下條件的最長子字串的長度 每個母音字母,即 a e i o u 在子字串中都恰好出現了偶數次。示例 1 輸入 s eleetminicoworoep 輸出 13 解釋 最長子字串是 leetminicowor 它包含 e,i,o 各 2 個,以及 0 個 a,u 示例...