add: 每个元音包含偶数次的最长子字符串

This commit is contained in:
yi-ge 2020-05-21 00:08:57 +08:00
parent 32fd589c3f
commit 2120bcdecf
4 changed files with 43 additions and 0 deletions

View File

@ -10,10 +10,12 @@
"defang", "defang",
"defanging", "defanging",
"dvdf", "dvdf",
"eleetminicoworoep",
"lcci", "lcci",
"lcof", "lcof",
"lcov", "lcov",
"leetcode", "leetcode",
"leetcodeisgreat",
"lrloseumgh", "lrloseumgh",
"mincost", "mincost",
"nums", "nums",

View File

@ -95,6 +95,10 @@ LeetCode 与 LintCode 解题记录。此为个人练习仓库,代码中对重
- LeetCode 1108. IP 地址无效化 <https://leetcode-cn.com/problems/defanging-an-ip-address/> - LeetCode 1108. IP 地址无效化 <https://leetcode-cn.com/problems/defanging-an-ip-address/>
- [每个元音包含偶数次的最长子字符串](src/string/find-the-longest-substring-containing-vowels-in-even-counts.js)
- LeetCode 1371. 每个元音包含偶数次的最长子字符串 <https://leetcode-cn.com/problems/find-the-longest-substring-containing-vowels-in-even-counts/>
## 数组/队列/集合/映射 ## 数组/队列/集合/映射
- [电话号码的字母组合](src/array/letter-combinations-of-a-phone-number.js) - [电话号码的字母组合](src/array/letter-combinations-of-a-phone-number.js)

View File

@ -0,0 +1,30 @@
/**
* @param {string} s
* @return {number}
*/
export const findTheLongestSubstring = function (s) {
const n = s.length
const pos = new Array(1 << 5).fill(-1)
let ans = 0; let status = 0
pos[0] = 0
for (let i = 0; i < n; ++i) {
const ch = s.charAt(i)
if (ch === 'a') {
status ^= 1 << 0
} else if (ch === 'e') {
status ^= 1 << 1
} else if (ch === 'i') {
status ^= 1 << 2
} else if (ch === 'o') {
status ^= 1 << 3
} else if (ch === 'u') {
status ^= 1 << 4
}
if (~pos[status]) {
ans = Math.max(ans, i + 1 - pos[status])
} else {
pos[status] = i + 1
}
}
return ans
}

View File

@ -0,0 +1,7 @@
import { findTheLongestSubstring } from '../../src/string/find-the-longest-substring-containing-vowels-in-even-counts'
test('每个元音包含偶数次的最长子字符串', () => {
expect(findTheLongestSubstring('eleetminicoworoep')).toBe(13)
expect(findTheLongestSubstring('leetcodeisgreat')).toBe(5)
expect(findTheLongestSubstring('bcbcbc')).toBe(6)
})