Leetcode 791. 自定义字符串排序

Leetcode 791. 自定义字符串排序

给定两个字符串 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 中的所有字符都 不同

我的想法:
这题这么简单,这我不秒过?
1.最开始想的是,搞一个 returnstr 用来返回值。
遍历 order,当遍历到的字符在字符串 s 中,returnstr 就加上这个字符;
再遍历 s ,当遍历到的字符不在 returnstr 中,returnstr 就加上这个字符。
返回 returnstr 。

class Solution:
    def customSortString(self, order: str, s: str) -> str:
        returnstr = str()
        for o in order:
            if o in s:
                returnstr += o
        for c in s:
            if c not in returnstr:
                returnstr += c
        return returnstr

结果 :

解答错误 3 / 39 个通过的测试用例
输入 order = “kqep” s = “pekeq”
输出 “kqep” 预期结果 “kqeep”

2.然后发现没考虑到重复字符的问题。改一下套路:新搞一个 slist = list(s)。
还是遍历 order,当遍历到的字符在字符串 s 中,returnstr 就加上这个字符。之前用的是 if,这回用的是 while ,并且将 slist 中这个字符减去,为了避免重复字符没在returnstr 中返回。
再遍历 slist ,当遍历到的字符不在 returnstr 中,returnstr 就加上这个字符。
返回 returnstr 。

class Solution:
    def customSortString(self, order: str, s: str) -> str:
        returnstr = str()
        slist = list(s)
        for o in order:
            while o in slist:
                returnstr += o
                slist.remove(o)
        for c in slist:
            if c not in returnstr:
                returnstr += c
        return returnstr

结果

解答错误 9 / 39 个通过的测试用例
输入 order = “hucw”
s = “utzoampdgkalexslxoqfkdjoczajxtuhqyxvlfatmptqdsochtdzgypsfkgqwbgqbcamdqnqztaqhqanirikahtmalzqjjxtqfnh”
输出 “hhhhhuucccwtzoampdgklexsqfjyvbnir”
预期结果 “hhhhhuucccwaaaaaaaaabbdddddeffffggggiijjjjkkkkllllmmmmnnnoooopppqqqqqqqqqqqrsssttttttttvxxxxxyyzzzzz”

3.这个输出咋差了这老些。又想了下,在遍历完 order 之后 slist 剩下的就都是没在returnstr 里的值了,直接合并加在 returnstr 里就好了。

class Solution:
    def customSortString(self, order: str, s: str) -> str:
        returnstr = str()
        slist = list(s)
        for o in order:
            while o in slist:
                returnstr += o
                slist.remove(o)
        returnstr += "".join(slist)
        return returnstr

这回过了
粘一下其他人的题解:
官方题解 - 自定义排序 / 计数排序
【宫水三叶】简单构造题

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值