[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 and target. You can take some letters from s and rearrange them to form new strings.

Return the maximum number of copies of target that can be formed by taking letters from s 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 字符串与数组互转,并保持数据去重排序功能

[JavaScript 刷题] 数组,字符串,ArrayList 的简单实现

力扣-面试题刷题第一天

Javascript中数组重排序方法详解

Javascript数组

LeetCode Java刷题笔记—143. 重排链表