javascript - 如何检查string1数字是否可以重新排列成string2?
问题描述
我想编写一个接受 str1 和 str2 的函数,并检查 str1 数字是否可以重新排列到 str2 中。
目前停留在这个:
我的代码工作正常,直到 str2 没有任何两位数。我怎样才能解决这个问题?
function scramble(str1, str2) {
str1 = str1.split('');
str2 = str2.split('');
let result = [];
for (let i = 0; i < str2.length; i++) {
for (let j = 0; j < str1.length; j++) {
if (str2[i] === str1[j]) {
result.push(str1[j]);
}
}
}
for (let i = 0; i < result.length; i++) {
if (result[i] === result[i + 1]) {
result.splice(i, 1);
--i;
}
}
return result.join('') === str2.join('')
}
console.log(scramble('rkqodlw','world'));
console.log(scramble('aabbcamaomsccdd','commas')); //heres the problem
解决方案
您想要计算每个字符中的各种字符并将其用作比较。
以下使用Map
对象然后迭代 str2 计数以确保测试字符串 (str1) 包含等于或大于 str2 中每个字符的计数
// helper function to map character counts
const charCount = (str) =>{
return [...str].reduce((a,c)=> a.set(c, (a.get(c)||0)+1), new Map)
}
function scramble(str1, str2) {
const s2Counts = charCount(str2),
s1Counts = charCount(str1);
return [...s2Counts.entries()].every(([char,count]) => s1Counts.get(char) >= count)
}
console.log(scramble('rkqodlw','world')); // expect true
console.log(scramble('aabbcamaomsccdd','commas')); // expect true
console.log(scramble('fobar','foobar')); // expect false
推荐阅读
- css - Ruby 中遗留应用程序中 CSS 的层次结构级别
- c++ - 避免溢出提升容器
- c# - 避免随机选择同一点来模仿“类人”行为
- asp.net-core - ASP.NET Core Web API - 列表/数组的路由约束
- java - 如何使用 Map 类型的元素集合更新实体
? - javascript - JavaScript Drag-n-Drop 在边缘浏览器上显示一个附加图标
- javascript - 无法在 React Redux 减速器中从购物车中删除商品
- kubernetes - 如何将 STS 应用程序和目标 Pod 调度到 OpenEBS 中的同一节点?
- linkedin - LinkedIn 公司资料插件未显示
- django - 使用模型管理员在管理员中显示链接