自定义字符串排序

简介: 自定义字符串排序

说在前面

🎈不知道大家对于算法的学习是一个怎样的心态呢?为了面试还是因为兴趣?不管是出于什么原因,算法学习需要持续保持。

一、题目描述

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

对 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"

提示:

1 <= order.length <= 26
1 <= s.length <= 200
order 和 s 由小写英文字母组成
order 中的所有字符都 不同

二、思路分析

字符串排序其实是很常见的问题,在平时的工作中我们也经常会遇到需要自定义的排序规则的相关需求功能实现。

这道题目的题意是说,我们需要按题目给出的order字符串中的字符排序优先进行排序,未在order中出现的字符串需要排在后面,即我们需要将目标字符串s中包含于order字符串中的字符优先排序,后面再将其他字符拼接到最后,具体思路如下:

  • 统计字符串s中每一个字符出现的次数
for(let i = 0; i < s.length; i++){
    map[s[i]] ? map[s[i]] ++ : map[s[i]] = 1;
}
  • 优先排序order中的字符
for(let i = 0; i < order.length; i++){
    if(map[order[i]]){
        res += order[i].repeat(map[order[i]]);
        delete map[order[i]];
    }
}
  • 省下的字符按与按顺序拼接到最后
for(const k in map){
    res += k.repeat(map[k]);
}

三、AC代码

/**
 * @param {string} order
 * @param {string} s
 * @return {string}
 */
var customSortString = function(order, s) {
    let map = {};
    for(let i = 0; i < s.length; i++){
        map[s[i]] ? map[s[i]] ++ : map[s[i]] = 1;
    }
    let res = '';
    for(let i = 0; i < order.length; i++){
        if(map[order[i]]){
            res += order[i].repeat(map[order[i]]);
            delete map[order[i]];
        }
    }
    for(const k in map){
        res += k.repeat(map[k]);
    }
    return res;
};

公众号

关注公众号『前端也能这么有趣』,获取更多有趣内容。

说在后面

🎉 这里是 JYeontu,现在是一名前端工程师,有空会刷刷算法题,平时喜欢打羽毛球 🏸 ,平时也喜欢写些东西,既为自己记录 📋,也希望可以对大家有那么一丢丢的帮助,写的不好望多多谅解 🙇,写错的地方望指出,定会认真改进 😊,偶尔也会在自己的公众号『前端也能这么有趣』发一些比较有趣的文章,有兴趣的也可以关注下。在此谢谢大家的支持,我们下文再见 🙌。

目录
相关文章
|
1月前
|
PHP Python
二维数组取值、拼接值成字符串
二维数组取值、拼接值成字符串
14 0
|
9月前
|
Java 编译器
Java字符串拼接选择的三种方式
Java字符串拼接选择的三种方式
56 0
|
1月前
|
索引 容器
06-数据容器str(字符串)-字符串的下标索引/字符串无法修改/查找字符串下标初始值/字符串的替换/字符串的分割/字符串去除前后空格/统计字符串的数量/字符串的循环遍历/对字符串进行分割
06-数据容器str(字符串)-字符串的下标索引/字符串无法修改/查找字符串下标初始值/字符串的替换/字符串的分割/字符串去除前后空格/统计字符串的数量/字符串的循环遍历/对字符串进行分割
|
1月前
|
Java 索引
Java实现字符串倒序打印
Java实现字符串倒序打印
40 0
|
1月前
字符串,每个里面包含0-N个数字,如3,8,2,编写函数,将两个这样的字符串合并,并且输出的字符串里面没有重复的数字,并从大到小排列.
字符串,每个里面包含0-N个数字,如3,8,2,编写函数,将两个这样的字符串合并,并且输出的字符串里面没有重复的数字,并从大到小排列.
23 0
|
1月前
|
Java
java字符串练习题4、统计一行字符串中所有的字符类型数量
java字符串练习题4、统计一行字符串中所有的字符类型数量
35 0
|
11月前
|
PHP
php数组学习(1):固定格式的字符串分割成数组后内容去重
php数组学习(1):固定格式的字符串分割成数组后内容去重
35 0
sort() 函数按照字符串顺序对值进行排序。
sort() 函数按照字符串顺序对值进行排序。
144 0
LeetCode 791. 自定义字符串排序
字符串S和 T 只包含小写字符。在S中,所有字符只会出现一次。
62 0
|
测试技术
字符串中有多少个不重复的字符并按由前到后的顺序输出一个新的字符串和该字符串长度的整数
字符串中有多少个不重复的字符并按由前到后的顺序输出一个新的字符串和该字符串长度的整数
63 0