题目:
总结:
1. 比赛环境下紧张,难以写出较高质量的代码
2. python基础遗忘,有的用法要现查文档
3. 知识短板,比如第三题思路可以用状态机来解决,涉及到编译原理的内容。
A: 重新格式化字符串
- 算法:提取数字序列D,字母序列A,根据A、D的长度进行拼接。
- 当 D=[1,2,3,4],A=['a','b','c'] 的时候,结果为:"1a2b3c4"
- 当 D=[1,2,3],A=['a','b','c','d'] 的时候,结果为:"a1b2c3d"
- 当 D=[1,2,3],A=['a','b','c'] 的时候,结果为:"1a2b3c"或者"a1b2c3"
- 如何避免写三个判断语句呢?
- 需要改进的地方:代码不够精简,逻辑重复的代码太多。
- 优化:
-
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 #...
-