自定义字符串排序

码农沉思录

共 1585字,需浏览 4分钟

 · 2022-11-22

👉 本题Leetcode 链接[1]

题目说明

给定两个字符串 ordersorder 的所有字母都是 唯一 的,并且以前按照一些自定义的顺序排序。

s 的字符进行置换,使其与排序的 order 相匹配。更具体地说,如果在 order 中的字符 x 出现字符 y 之前,那么在排列后的字符串中, x 也应该出现在 y 之前。

返回 满足这个性质的 s 的任意一种排列。

输入输出

  • 示例 1:

    • 输入: order = "cba", s = "abcd"
    • 输出: "cbad"
    • 解释: “a”、“b”、“c”是按顺序出现的,所以“a”、“b”、“c”的顺序应该是“c”、“b”、“a”。因为“d”不是按顺序出现的,所以它可以在返回的字符串中的任何位置。“dcba”、“cdba”、“cbda”也是有效的输出。
  • 示例 2:

    • 输入: order = "cbafg", s = "abcd"
    • 输出: "cbad"

解题思路

  • 使用 map 统计 s 中字符出现的次数
  • 按照 order 顺序遍历并返回所有符合要求的字符串,多个相同的字符串直接 repeat 其数量即可
  • 继续遍历字符串 s,对于 order 中不存在的字符直接拼接在其后返回

代码实现

function customSortString(order: string, s: string): string {
  let res = '', map = new Map<stringnumber>()

  for(let char of s) {
      if(map.has(char)) {
          map.set(char, map.get(char)! + 1)
      } else {
          map.set(char, 1)
      }
  }

  for(let char of order) {
      if(map.has(char)) res += char.repeat(map.get(char)!)
  }
  
  for(let char of s) {
      if(order.indexOf(char) === -1) res += char
  }

  return res
};

参考资料

[1]

👉 本题Leetcode 链接: https://leetcode.cn/problems/custom-sort-string/


浏览 15
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报