go: add «1371. Find the Longest Substring Containing Vowels in Even Counts»
Signed-off-by: Matej Focko <me@mfocko.xyz>
This commit is contained in:
parent
5449ec348a
commit
967ca0f1a2
1 changed files with 40 additions and 0 deletions
|
@ -0,0 +1,40 @@
|
|||
package main
|
||||
|
||||
func findTheLongestSubstring(s string) int {
|
||||
getMask := func(c rune) int {
|
||||
switch c {
|
||||
case 'a':
|
||||
return 1
|
||||
case 'e':
|
||||
return 2
|
||||
case 'i':
|
||||
return 4
|
||||
case 'o':
|
||||
return 8
|
||||
case 'u':
|
||||
return 16
|
||||
default:
|
||||
return 0
|
||||
}
|
||||
}
|
||||
|
||||
longest := 0
|
||||
|
||||
indices := make([]int, 32)
|
||||
for i, _ := range indices {
|
||||
indices[i] = -1
|
||||
}
|
||||
|
||||
xor := 0
|
||||
for i, c := range s {
|
||||
xor ^= getMask(c)
|
||||
|
||||
if indices[xor] == -1 && xor != 0 {
|
||||
indices[xor] = i
|
||||
}
|
||||
|
||||
longest = max(longest, i-indices[xor])
|
||||
}
|
||||
|
||||
return longest
|
||||
}
|
Loading…
Reference in a new issue