diff --git a/.vscode/settings.json b/.vscode/settings.json
index 4c3c287..0f9d0d1 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -6,6 +6,7 @@
"Paddr",
"Prinme",
"abcdefg",
+ "abciiidef",
"cdefgab",
"chuan",
"defang",
diff --git a/README.md b/README.md
index 49e60b4..50e2dac 100644
--- a/README.md
+++ b/README.md
@@ -113,6 +113,10 @@ LeetCode 与 LintCode 解题记录。此为个人练习仓库,代码中对重
- LeetCode 5416. 检查单词是否为句中其他单词的前缀
+- [定长子串中元音的最大数目](src/string/maximum-number-of-vowels-in-a-substring-of-given-length.js)
+
+ - LeetCode 5417. 定长子串中元音的最大数目
+
## 数组/队列/集合/映射
- [电话号码的字母组合](src/array/letter-combinations-of-a-phone-number.js)
diff --git a/src/string/maximum-number-of-vowels-in-a-substring-of-given-length.js b/src/string/maximum-number-of-vowels-in-a-substring-of-given-length.js
new file mode 100644
index 0000000..996c35c
--- /dev/null
+++ b/src/string/maximum-number-of-vowels-in-a-substring-of-given-length.js
@@ -0,0 +1,45 @@
+const v = ['a', 'e', 'i', 'o', 'u']
+const check = (str) => {
+ const map = new Map()
+
+ for (let i = 0; i < str.length; i++) {
+ if (v.includes(str[i])) {
+ map.set(str[i], (map.get(str[i]) || 0) + 1)
+ }
+ }
+
+ let res = 0
+ map.forEach(n => {
+ res += n
+ })
+ return res
+}
+
+/**
+ * @param {string} s
+ * @param {number} k
+ * @return {number}
+ */
+export const maxVowels = function (s, k) {
+ let i = 0
+ let res = 0
+
+ const temp = s.slice(i, i + k)
+ let tmp = check(temp)
+ res = Math.max(res, tmp)
+
+ while (i + k <= s.length) {
+ i++
+ if (v.includes(s[i + k - 1])) {
+ tmp++
+ }
+
+ if (v.includes(s[i - 1])) {
+ tmp--
+ }
+
+ res = Math.max(res, tmp)
+ }
+
+ return res
+}
diff --git a/test/string/maximum-number-of-vowels-in-a-substring-of-given-length.test.js b/test/string/maximum-number-of-vowels-in-a-substring-of-given-length.test.js
new file mode 100644
index 0000000..2e35a3a
--- /dev/null
+++ b/test/string/maximum-number-of-vowels-in-a-substring-of-given-length.test.js
@@ -0,0 +1,6 @@
+import { maxVowels } from '../../src/string/maximum-number-of-vowels-in-a-substring-of-given-length'
+
+test('定长子串中元音的最大数目', () => {
+ expect(maxVowels('abciiidef', 3)).toBe(3)
+ expect(maxVowels('rhythms', 4)).toBe(0)
+})