[ 周赛总结 ] 第 185 场力扣周赛

题目:

 

总结:

1. 比赛环境下紧张,难以写出较高质量的代码

2. python基础遗忘,有的用法要现查文档

3. 知识短板,比如第三题思路可以用状态机来解决,涉及到编译原理的内容。

A: 重新格式化字符串

  • 算法:提取数字序列D,字母序列A,根据A、D的长度进行拼接。
  1. 当 D=[1,2,3,4],A=['a','b','c'] 的时候,结果为:"1a2b3c4"
  2. 当 D=[1,2,3],A=['a','b','c','d'] 的时候,结果为:"a1b2c3d"
  3. 当 D=[1,2,3],A=['a','b','c'] 的时候,结果为:"1a2b3c"或者"a1b2c3"
  4. 如何避免写三个判断语句呢?
  • 需要改进的地方:代码不够精简,逻辑重复的代码太多。
  • 优化:
    • class Solution(object):
          def reformat(self, s):
              import re
              ret = ''
      
              # 优化点1:正则匹配字母、数字
              a = re.findall(r'\d',s)
              b = re.findall(r'[a-z]',s)
              # 优化点2:判断a,b长度,使得len(a)<=len(b)
              a,b = sorted([a,b],key=len)
              # 或者这样
              # a,b = (a,b) if len(a)<=len(b) else (b,a)
              i=0
              if len(b)-len(a)>1:
                  return ''
              # 优化点3:根据最长的数组b来遍历,若a位数不足,则后面补''来保证循环的正确。
              while i<len(b):
                  ret += b[i] + (a[i] if i<len(a) else '')
                  i+=1
              return ret

      参考:https://leetcode-cn.com/problems/reformat-the-string/comments/355658

B: 点菜展示表

  • 算法:灵活运用字典,比如3号桌点了两个Ceviche,一个Fried Chicken,用字典来表示:
    • { 3 : {'Ceviche':2,'Fried Chicken':1} }
  • 面向对象的思路:把客人用餐的桌子定义为一类Tables,Tables有它的编号 和 点的菜。

   如果想要点菜,还有点菜的功能:setItem()

    • class Tables():
          def __init__(self,id):
              self.id=id
              self.item = {}
      
          def setItem(self,key):
              if key in self.item:
                  self.item[key]+=1
              else:
                  self.item[key]=1
          #...

       

posted @ 2020-04-20 08:25  remly  阅读(149)  评论(0编辑  收藏  举报