思路:
- 对于每一个学生的评价,使用 split 方法提取评价中的每一个字符,然后逐个判断是否是正面或者负面词汇来计算分数
- 对id按照要求进行排序。
- 为了加快字符的正负判断速度,先将 positive 和 negative 两个列表转化为 set 这样就可以实现 O(1) 的查询效率。
class Solution:
def topStudents(self, positive_feedback: List[str], negative_feedback: List[str], report: List[str], student_id: List[int], k: int) -> List[int]:
score = {}
positive_feedback = set(positive_feedback)
negative_feedback = set(negative_feedback)
for re, id in zip(report, student_id):
sc = 0
for t in re.split():
if t in positive_feedback:
sc += 3
elif t in negative_feedback:
sc -= 1
score[id] = sc
student_id.sort(reverse=True, key=lambda x:(score[x], -x))
return student_id[:k]