• 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

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

  • 相关阅读:
    L2-030 冰岛人(Python3)
    14条最佳JavaScript代码编写技巧
    qt使用mysql数据库
    MATLAB | 一起来感受数学之美叭
    【JavaEE】_ajax构造HTTP请求
    最热门的跨考考研5大专业是哪些?
    趣链BaaS服务平台调研
    内存取证——ABC包
    微弱电流检测放大器PCB布线布局设计
    oracle SQL
  • 原文地址:https://blog.csdn.net/li_yizhixiaowukong/article/details/127836189