当然,以下是使用JavaScript实现统计字符串中每个字母出现次数的示例代码:
function countLetters(str) {
const counts = {};
// 辅助函数:递归处理带括号的子串
function processSubstring(substring, multiplier) {
let tempStr = '';
let tempMultiplier = 1;
for (let i = 0; i < substring.length; i++) {
if (substring[i] === '(') {
const nestedResult = processSubstring(substring.slice(i + 1), parseInt(substring[i - 1]));
tempStr += nestedResult.str;
i += nestedResult.indexOffset + 1;
} else if (!isNaN(substring[i])) {
tempMultiplier = parseInt(substring[i]);
} else if (substring[i] === ')') {
return { str: tempStr.repeat(tempMultiplier * multiplier), indexOffset: i };
} else {
tempStr += substring[i].repeat(tempMultiplier * multiplier);
}
}
return { str: tempStr, indexOffset: substring.length - 1 };
}
// 遍历字符串,统计字母数量
for (let i = 0; i < str.length; i++) {
if (str[i] === '(') continue;
if (!isNaN(str[i])) {
continue;
} else if (str[i] === ')') {
continue;
} else if (str[i + 1] === '(') {
const nestedResult = processSubstring(str.slice(i + 2), parseInt(str[i]));
const nestedCounts = countLetters(nestedResult.str);
for (const letter in nestedCounts) {
counts[letter] = counts[letter] ? counts[letter] + nestedCounts[letter] : nestedCounts[letter];
}
i += nestedResult.indexOffset + 2;
} else {
counts[str[i]] = counts[str[i]] ? counts[str[i]] + 1 : 1;
}
}
return counts;
}
// 测试示例一
const example1 = 'A3B2';
console.log(countLetters(example1)); // 输出:{ A: 3, B: 2 }
// 测试示例二
const example2 = 'A(A(A2B)2)3C2';
console.log(countLetters(example2)); // 输出:{ A: 16, B: 6, C: 2 }
这段代码使用了递归的方式处理带括号的子串,通过遍历字符串并统计每个字母出现的次数,最终返回一个结果对象。你可以在浏览器的开发者工具或Node.js环境中运行此代码,并根据需要进行修改和扩展。
内容由零声教学AI助手提供,问题来源于学员提问




