[IT 邦帮忙] 优化或重写方法,使计算长字符串时尽可能缩短运算时间
- 0次
- 2021-08-09 23:52:37
- idczone
如果 str1 包含 str2 的所有字母(包括数量),为真,反之为假
function scramble(str1, str2) {
let s1 = str1.split("").sort()
let s2 = str2.split("").sort()
let n = 0
s2.forEach(e=>{
let index = s1.indexOf(e)
if(index>-1){
n++
s1.splice(index,1)
}
})
if(n==s2.length && n!=0){
return true
}else{
return false
}
}
function scramble(str1, str2) {
const counter = Array.from(str1).reduce((p, c) => {p[c] = (p[c] || 0) + 1; return p;}, {})
for (const c of str2) {
if (!counter[c]) return false;
counter[c]--;
}
return true
}
leetcode 是个好东西
用 webassembly 写吧,速度很快的
const scramble = (str1, str2) =>
[...str2].every(val => str2.split(val).length <= str1.split(val).length);
搞两个字典,对每一个字母计数,然后比较两个字典的字母计数。
复杂度 n log n
如果你需要大小写匹配,可以做计数器;反之,直接用你的子字符串做分隔