讨论/题目交流/🏆 第 159 场力扣周赛/
🏆 第 159 场力扣周赛

欢迎小伙伴们在这里交流分享你的参赛心得以及体验。【前往竞赛

image.png

缀点成线
删除子文件夹
替换子串得到平衡字符串
规划兼职工作

展开讨论

第一题

  • 过同一点的斜率,选第一个点
class Solution:
    def checkStraightLine(self, coordinates: List[List[int]]) -> bool:
        sk = set()
        if len(coordinates) == 2:
            return True
        sx, sy = coordinates[0]
        for x, y in coordinates[1:]:
            if x == sx:
                sk.add(float("inf"))
            else:
                sk.add((y - sy) / (x - sx))
        return len(sk) == 1

第二题

  • 排序
class Solution:
    def removeSubfolders(self, folder: List[str]) -> List[str]:
        ans = []
        folder.sort()
        while folder:
            ans.append(folder.pop(0))
            while folder and folder[0].startswith(ans[-1] + "/"):
                folder.pop(0)
        return ans

第三题

  • 滑动窗口
class Solution:
    def balancedString(self, s: str) -> int:
        t = len(s) // 4
        co = collections.Counter(s)
        dy = {} # 确定有哪些字符一定要换成别的
        for c in co:
            if co[c] > t:
                dy[c] = co[c] - t
        if not dy:
            return 0
        cur = {}

        def check():
            for c in dy:
                if cur.get(c, 0) < dy[c]:
                    return False
            return True
        i = j = 0 # 从i到j的滑动窗口中包含所有的需要变化的字符
        ans = len(s)
        while j < len(s):
            cur[s[j]] = cur.get(s[j], 0) + 1
            j += 1
            while check():
                ans = min(ans, j - i)
                cur[s[i]] = cur.get(s[i], 0)-1
                i += 1

        return ans
展开全部 16 讨论