我这里有一个小问题。我正在解决我书中的一些随机问题。这是任务:
任务
平衡字符串是字符串中每个字符出现的次数与其他字符相同的字符串。例如,“ ab ”、“ aaabbb ”和“ ababaabb ”是平衡的,而“ abb ”和“ abbbaa ”则不是。
此外,字符串还可能包含通配符“*”。此通配符可以代表您希望的任何其他字符。此外,通配符必须代表另一个字符;它们不能闲置不用。百搭平衡字符串是这样一种字符串,其中所有通配符都可以通过这种方式转换为字符以生成简单的平衡字符串。
这个挑战涉及编写一个函数 balance(s) 来检查 s 是否平衡。
输入仅限于包含大小写字母字符和“*”通配符的字符串。输入字符串将匹配正则表达式
^[A-Za-z*] $ *
其他例子:
平衡(“a”)?真的
平衡(“ab”)?真的
平衡(“abc”)?真的
平衡(“abcb”)?错误的
平衡(“Aaa”)?错误的
平衡(“***********”)?真的
我已经能够得到一些答案,但我的算法真的让我失望。我在想是否有什么我可以做的来调整这段代码:
function balanced(s) {
const cMap = {};
for (let c of s) {
cMap[c] ? cMap[c]++ : (cMap[c] = 1);
}
const freq = new Set(Object.values(cMap));
if(s.includes('*')){
return true;
}
if (freq.size === 0 || freq.size === 1){
return true;
}
if (freq.size === 1) {
const max = …Run Code Online (Sandbox Code Playgroud)