• 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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    结果 :

    解答错误 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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    结果

    解答错误 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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

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

  • 相关阅读:
    斯坦福机器学习 Lecture3
    【开发者必看】【Health kit】运动健康服务典型问题合集
    java使用poi、itextpdf将word、ppt转为pdf文件,并对pdf文件加盖签章
    C语言练习:输入日期输出该日期为当年第几天
    JavaSE综合大练习——图书管理系统的实现
    postgresql|数据库|数据库测试工具pgbench之使用
    HPE Aruba Networking连续六年蝉联Gartner SD-WAN魔力象限领导者
    React + Springboot + Quartz,从0实现Excel报表自动化
    java计算机毕业设计基于ssm的火车订票管理系统(源代码+数据库+Lw文档)
    【Linux】多线程
  • 原文地址:https://blog.csdn.net/li_yizhixiaowukong/article/details/127836189