[Leetcode Weekly Contest]185

链接:LeetCode

[Leetcode]1417. 重新格式化字符串

给你一个混合了数字和字母的字符串 s,其中的字母均为小写英文字母。
请你将该字符串重新格式化,使得任意两个相邻字符的类型都不同。也就是说,字母后面应该跟着数字,而数字后面应该跟着字母。
请你返回 重新格式化后 的字符串;如果无法按要求重新格式化,则返回一个 空字符串 。

直接暴力就可以了。

class Solution:
    def reformat(self, s: str) -> str:
        s1 = [ch for ch in s if ch.isdigit()]
        s2 = [ch for ch in s if ch.isalpha()]
        res = ''
        if abs(len(s1)-len(s2)) > 1:
            return res
        if len(s1) > len(s2):
            res += s1[0] + ''.join([''.join(x) for x in list(zip(s2,s1[1:]))])
        elif len(s1) < len(s2):
            res += s2[0]+ ''.join([''.join(x) for x in list(zip(s1,s2[1:]))])
        else:
            res += ''.join([''.join(x) for x in list(zip(s1,s2))])
        return res

[Leetcode]1418. 点菜展示表

给你一个数组 orders,表示客户在餐厅中完成的订单,确切地说, \(orders[i]=[customerNamei,tableNumberi,foodItemi]\),其中 customerNamei 是客户的姓名,tableNumberi 是客户所在餐桌的桌号,而 foodItemi 是客户点的餐品名称。
请你返回该餐厅的 点菜展示表 。在这张表中,表中第一行为标题,其第一列为餐桌桌号 “Table” ,后面每一列都是按字母顺序排列的餐品名称。接下来每一行中的项则表示每张餐桌订购的相应餐品数量,第一列应当填对应的桌号,后面依次填写下单的餐品数量。
注意:客户姓名不是点菜展示表的一部分。此外,表中的数据行应该按餐桌桌号升序排列。

直接暴力就可以了。

class Solution:
    def displayTable(self, orders):
        tableNumbers = set()
        foodItems = set()
        items = {}
        for name,tableNumber,foodItem in orders:
            tableNumbers.add(tableNumber)
            foodItems.add(foodItem)
            if tableNumber not in items:
                items[tableNumber] = collections.defaultdict(int)
            items[tableNumber][foodItem] += 1
        res = [['' for _ in range(len(foodItems)+1)] for _ in range(len(tableNumbers)+1)]
        foodItems = sorted(list(foodItems))
        res[0] = ['Table'] + foodItems
        tableNumbers = sorted(list(tableNumbers),key=lambda x:int(x))
        for i in range(len(tableNumbers)):
            res[i+1][0] = str(tableNumbers[i])
            for j in range(len(foodItems)):
                res[i+1][j+1] = str(items[tableNumbers[i]][foodItems[j]])
        return res

[Leetcode]5390. 数青蛙

给你一个字符串 croakOfFrogs,它表示不同青蛙发出的蛙鸣声(字符串 "croak" )的组合。由于同一时间可以有多只青蛙呱呱作响,所以 croakOfFrogs 中会混合多个 “croak” 。请你返回模拟字符串中所有蛙鸣所需不同青蛙的最少数目。
注意:要想发出蛙鸣 "croak",青蛙必须 依序 输出 ‘c’, ’r’, ’o’, ’a’, ’k’ 这 5 个字母。如果没有输出全部五个字母,那么它就不会发出声音。
如果字符串 croakOfFrogs 不是由若干有效的 "croak" 字符混合而成,请返回 -1 。

遍历字符串,要求现存的字符串中字符串数量 c >= r >= o >= a >= k,否则返回 -1。青蛙的数量即,遍历过程中,最大的,出现c的个数比k更多的数量。

class Solution:
    def minNumberOfFrogs(self, croakOfFrogs: str) -> int:
        if not croakOfFrogs.count('c') == croakOfFrogs.count('r') == croakOfFrogs.count('o') == croakOfFrogs.count('a') == croakOfFrogs.count('k'):
            return -1
        nums = [0 for i in range(5)]
        flag = [True] + [False for i in range(4)]
        dic = {ch:i for i,ch in enumerate('croak')}
        res = result = 0
        for ch in croakOfFrogs:
            i = dic[ch]
            if not flag[i]:
                return -1
            nums[i] += 1
            if i<4:
                flag[i+1] = True
            if i>0 and nums[i]==nums[i-1]:
                flag[i] = False
            if ch == 'c':
                result += 1
            if ch== 'k':
                result -= 1
            res = max(result,res)
        return res

[Leetcode]1420. 生成数组

给你三个整数 n、m 和 k 。下图描述的算法用于找出正整数数组中最大的元素。

算法

请你生成一个具有下述属性的数组 arr :

  • arr 中有\(n\)个整数。
  • \(1 <= arr[i] <= m 其中 (0 <= i < n) 。\)
  • 将上面提到的算法应用于 arr ,search_cost 的值等于 k 。
    返回上述条件下生成数组 arr 的 方法数 ,由于答案可能会很大,所以 必须 对 10^9 + 7 取余。

示例 1:
输入:n = 2, m = 3, k = 1
输出:6
解释:可能的数组分别为\([1, 1], [2, 1], [2, 2], [3, 1], [3, 2] [3, 3]\)

动态规划,啥也不说了,看参考吧。

class Solution:
    def numOfArrays(self, n: int, m: int, k: int) -> int:
        if k == 0:
            return 0
        dp = [[[0] * (m) for _ in range(k + 1)] for __ in range(n)]
        dp[0][1] = [1] * m

        for i in range(1, n):
            for j in range(1, k + 1):
                for p in range(m):
                    dp[i][j][p] = sum(dp[i - 1][j - 1][: p]) + dp[i - 1][j][p] * (p + 1)
                    dp[i][j][p] %= 1e9+7

        return int(sum(dp[-1][-1])%(1e9+7))

参考:
leetcode

posted @ 2020-04-20 16:37  Jamest  阅读(139)  评论(0编辑  收藏  举报