题目如下
找到给定字符串(由小写字符组成)中的最长子串 T , 要求 T 中的每一字符出现次数都不少于 k 。输出 T 的长度。
示例 1:
输入:
s = "aaabb", k = 3
输出:
3
最长子串为 "aaa" ,其中 'a' 重复了 3 次。
示例 2:
输入:
s = "ababbc", k = 2
输出:
5
最长子串为 "ababb" ,其中 'a' 重复了 2 次, 'b' 重复了 3 次。
解答,第一眼看到这个题目,首先需要找到每一个字符出现的频率,在根据频率符合大于K进行汇总
第一遍的答案
var longestSubstring = function(s, k) {
let arr = s.split('')
let obj = {}
arr.forEach(item => {
if (obj[item]) {
obj[item] = obj[item] +1
} else {
obj[item] = 1
}
})
let number = 0
for (const i in obj) {
if (obj[i] >= k) {
number += obj[i]
}
}
return number
};
console.log(longestSubstring('aaabb', 3)) ==>3
console.log(longestSubstring('ababbc', 2)) ==>5
答案是正确的,首先字符串分割,进行遍历,按字符:频率的形式存到对象里,在对对象进行遍历取值,然后在来优化一下,缩减一下代码,用三目运算符来代替if else
var longestSubstring = function(s, k) {
let obj = {}
let number = 0
s.split('').forEach(item => {
obj[item] ? (obj[item] = obj[item] +1 ): (obj[item] = 1)
})
for (const i in obj) {
obj[i] >= k && (number += obj[i])
}
return number
};
console.log(longestSubstring('aaabb', 3)) ==>3
console.log(longestSubstring('ababbc', 2))
简化了几行,性能上没有太大的变化,看起来舒服一点吧。
总感觉一遍循环就可以完成这个事情,我这里循环了两遍
题目来自于leetcode
vscode leetcode插件地址https://github.com/jdneo/vsco...
上班刷题不是梦
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。