LeetCode - 1371 每个元音包含偶数次的最长子字符串(Java & JS & Python & C)
题目:给你一个字符串 s
,请你返回 s
中最长的满足如下条件的子字符串的长度:每个元音字母在子字符串中的出现次数都是偶数。
元音字母包括 'a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U'
。
示例 1:
输入:s = "eleetminicoworoep"
输出:13
解释:子字符串是 "minicowor" ,它包含 'a','e','i','o' 各 2 个,总共 8 个元音字母,满足每个元音字母出现次数都是偶数。
示例 2:
输入:s = "leetcodeisgreat"
输出:5
解释:子字符串是 "leetc" ,它包含 'e' 和 'i' 各 2 个,满足每个元音字母出现次数都是偶数。
示例 3:
输入:s = "bcbcbc"
输出:0
解释:没有子字符串满足条件,因此返回 0 。
提示:
1 <= s.length <= 10^5
s
只包含小写或大写英文字母。
Java 解法:
class Solution {
public int findTheLongestSubstringWithEvenNumberOfVowels(String s) {
int ans = 0, count = 0;
boolean[] vowel = new boolean[52];
for (int i = 0; i < 26; i++) {
vowel['a' + i] = true;
vowel['A' + i] = true;
}
int[] last = new int[1];
for (int i = 0; i < s.length(); i++) {
if (vowel[s.charAt(i)]) {
count++;
}
while (count > 1 && i - last[0] > 0) {
if (vowel[s.charAt(last[0])]) {
count--;
}
last[0]++;
}
ans = Math.max(ans, i - last[0] + 1);
}
return ans;
}
}
JavaScript 解法:
var findTheLongestSubstringWithEvenNumberOfVowels = function(s) {
let ans = 0, count = 0;
const vowel = new Set(['a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U']);
let last = -1;
for (let i = 0; i < s.length; i++) {
if (vowel.has(s[i])) {
count++;
}
while (count > 1 && i - last > 0) {
if (vowel.has(s[last + 1])) {
count--;
}
last++;
}
ans = Math.max(ans, i - last);
}
return ans;
};
Python 解法:
class Solution:
def findTheLongestSubstringWithEvenNumberOfVowels(self, s: str) -> int:
ans = 0
count = 0
vowel = set(['a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U'])
last = -1
for i in range(len(s)):
if s[i] in vowel:
count += 1
while count > 1 and i - last > 0:
if s[last + 1] in vowel:
count -= 1
last += 1
ans = max(ans, i - last)
return ans
C 解法:
#
评论已关闭