侧边栏壁纸
博主头像
GabrielxD

列車は必ず次の駅へ。では舞台は?私たちは?

  • 累计撰写 471 篇文章
  • 累计创建 108 个标签
  • 累计收到 9 条评论

目 录CONTENT

文章目录

【自定义排序】自定义字符串排序

GabrielxD
2022-11-13 / 0 评论 / 0 点赞 / 19 阅读 / 451 字 / 正在检测是否收录...

题目

791. 自定义字符串排序


给定两个字符串 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"

提示:

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

解题

方法一:自定义排序

思路

s 按照 order 给出的顺序做自定义排序即可。

代码

class Solution {
    public String customSortString(String order, String s) {
        int[] mp = new int[128];
        char[] od = order.toCharArray();
        for (int i = 0; i < od.length; ++i) mp[od[i]] = i;
        List<Character> chs = new ArrayList<Character>(){{
            for (char ch : s.toCharArray()) this.add(ch);
        }};
        chs.sort((a, b) -> { return mp[a] - mp[b]; });
        StringBuilder ans = new StringBuilder();
        for (char ch : chs) ans.append(ch);
        return ans.toString();
    }
}
class Solution {
public:
    string customSortString(string order, string s) {
        sort(s.begin(), s.end(), [&order](char& a, char& b) -> bool { return order.find(a) < order.find(b); });
        return s;
    }
};
0

评论区