共计 976 个字符,预计需要花费 3 分钟才能阅读完成。
题目如下
找到给定字符串(由小写字符组成)中的最长子串 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…
上班刷题不是梦
正文完
发表至: javascript
2019-08-28