[JavaScript 刷题] 数组 - 重排字符形成目标字符串,leetcode 2287
Posted GoldenaArcher
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[JavaScript 刷题] 数组 - 重排字符形成目标字符串,leetcode 2287相关的知识,希望对你有一定的参考价值。
[javascript 刷题] 数组 - 重排字符形成目标字符串,leetcode 2287
github repo 地址: https://github.com/GoldenaArcher/js_leetcode,Github 的目录 大概 会更新的更勤快一些。
题目地址:2287. Rearrange Characters to Make Target String
题目
如下:
You are given two 0-indexed strings
s
andtarget
. You can take some letters froms
and rearrange them to form new strings.Return the maximum number of copies of
target
that can be formed by taking letters froms
and rearranging them.
解题思路
题目中给的一个案例是:
Input: s = “ilovecodingonleetcode”, target = “code”
Output: 2
是因为 ilovecodingonleetcode
可以重组成包含两个 code
的字符串:‘ilovecodingonleetcode’,因此只需要将出现的字母和字母出现的频率记录下来即可。
我一开始使用 HashMap 实现的,不过后面想一下,英文字母总共就是 26 个,使用数组去保存也一样。
这个时候就体现出 JavaScript 刷题一个麻烦的地方,其它大部分语言中 'c' - 'a'
是可以直接获得 charCode 的,使用 JavaScript 刷题就需要用 String.charCodeFrom()
去进行转换……
使用 JavaScript 解题
/**
* @param string s
* @param string target
* @return number
*/
var rearrangeCharacters = function (s, target)
const map = new Map();
for (const char of s)
if (map.has(char)) map.set(char, map.get(char) + 1);
else map.set(char, 1);
const targetMap = new Map();
for (const char of target)
if (targetMap.has(char)) targetMap.set(char, targetMap.get(char) + 1);
else targetMap.set(char, 1);
let min = Infinity;
for (const [key, val] of targetMap)
if (!map.has(key)) return 0;
min = Math.min(min, Math.floor(map.get(key) / val));
return min;
;
以上是关于[JavaScript 刷题] 数组 - 重排字符形成目标字符串,leetcode 2287的主要内容,如果未能解决你的问题,请参考以下文章
JavaScript 字符串与数组互转,并保持数据去重排序功能