文章目录
- [6008. 统计包含给定前缀的字符串](https://leetcode-cn.com/problems/counting-words-with-a-given-prefix/)
- [6009. 使两字符串互为字母异位词的最少步骤数](https://leetcode-cn.com/problems/minimum-number-of-steps-to-make-two-strings-anagram-ii/)
- [6010. 完成旅途的最少时间](https://leetcode-cn.com/problems/minimum-time-to-complete-trips/)
- [6011. 完成比赛的最少时间](https://leetcode-cn.com/problems/minimum-time-to-finish-the-race/)
- 总结
6008. 统计包含给定前缀的字符串
API题,一行
class Solution:
def prefixCount(self, words: List[str], pref: str) -> int:
return sum(w.startswith(pref) for w in words)
6009. 使两字符串互为字母异位词的最少步骤数
①哈希,二行
class Solution:
def minSteps(self, s: str, t: str) -> int:
cnt1,cnt2=Counter(s),Counter(t)
return sum(abs(cnt1[x]-cnt2[x]) for x in set(s+t))
②并集减去交集,二行
class Solution:
def minSteps(self, s: str, t: str) -> int:
cs,ct = Counter(s),Counter(t)
return sum(((cs | ct) - (cs & ct)).values())
6010. 完成旅途的最少时间
二分,注意溢出,五行代码
class Solution:
def minimumTime(self, time: List[int], totalTrips: int) -> int:
l, r = 1, 10 ** 16
while l < r:
m = (l + r) // 2
l,r = (l,m) if sum(m//t for t in time)>=totalTrips else (m+1,r)
return l
灵茶山大佬的一行解法,奇妙的带key二分(python3.10支持)!
class Solution:
def minimumTime(self, time: List[int], totalTrips: int) -> int:
return bisect_left(range(totalTrips * min(time)), totalTrips, key=lambda x: sum(x // t for t in time))
6011. 完成比赛的最少时间
这题可可没能解决,在参考了灵茶山大佬的的题解后整理成了下面的八行代码:👇
class Solution:
def minimumFinishTime(self, tires: List[List[int]], t: int, n: int) -> int:
min_sec = [float('inf')] * 18
for f, r in tires:
x, time, sum = 1, f, 0
while time <= t + f:sum,min_sec[x],time,x = sum+time,min(min_sec[x], sum+time),time*r,x+1
f = [-t]+[0] * (n + 1)
for i in range(1, n + 1):
f[i] = t + min(f[i - j] + min_sec[j] for j in range(1, min(18, i + 1)))
return f[n]
总结
T1+T2+T3+T4 一共
1+2+1+8=12
行代码,完成【20行完成周赛】的目标!
此外,可可也了解到python3.10
有许多好用的新特性,这将是可可下一周的学习目标!