LeetCode(2023-11-30)


1657. 确定两个字符串是否接近

1657. 确定两个字符串是否接近

from collections import Counter


class Solution:
    def closeStrings(self, word1: str, word2: str) -> bool:
        if len(word1) != len(word2):
            return False
        if set(word1) ^ set(word2):
            return False
        word1 = Counter(word1)
        word2 = Counter(word2)
        if sorted(word2.values()) == sorted(word1.values()):
            return True
        return False

面试题 16.17. 连续数列

面试题 16.17. 连续数列

from typing import List


class Solution:
    def maxSubArray(self, nums: List[int]) -> int:
        for i in range(1, len(nums)):
            nums[i] = max(nums[i], nums[i] + nums[i - 1])
        return max(nums)

LCP 23. 魔术排列

LCP 23. 魔术排列

模拟,详细解释一下K的来历

from typing import List


class Solution:
    # k 只能是 len(最长公共前缀)
    def isMagic(self, target: List[int]) -> bool:
        if len(target) == 1:
            return True
        k = self.get_k(target)
        if k == 0:
            return False
        if k == -1:
            return True
        range_times = len(target) // k + int(bool(len(target) % k))
        check_list = [i + 1 for i in range(len(target))]
        ans = []
        for i in range(range_times):
            check_list = self.magic_sort(check_list)
            ans.extend(check_list[:k])
            check_list = check_list[k:]
        return ans == target
        # print(k)

    def magic_sort(self, nums):
        new_nums = [nums[i] for i in range(len(nums)) if i % 2 == 1]
        new_nums.extend([nums[i] for i in range(len(nums)) if i % 2 == 0])
        return new_nums

    def get_k(self, target):
        new = self.magic_sort([i + 1 for i in range(len(target))])
        for i in range(len(target)):
            if target[i] != new[i]:
                return i
        return -1

720. 词典中最长的单词

720. 词典中最长的单词

class Solution:
    def __init__(self):
        self.word = ''

    def longestWord(self, words: List[str]) -> str:
        tree = {}
        words.sort(key=lambda x: len(x))
        for w in words:
            level = tree
            cnt = 0
            c = 0
            for c in range(len(w)):
                next_level = level.get(w[c], None)
                if next_level is None:
                    if c == len(w) - 1:
                        level[w[c]] = {}
                    break
                level = next_level
                cnt += 1
            if c == len(w) - 1:
                if len(w) > len(self.word):
                    self.word = w
                elif len(w) == len(self.word) and w < self.word:
                    self.word = w
        return self.word

2390. 从字符串中移除星号

2390. 从字符串中移除星号

class Solution:
    def removeStars(self, s: str) -> str:
        index = len(s) - 1
        ans = ''
        delete = 0
        while index != -1:
            if s[index] == '*':
                delete += 1
            else:
                if delete > 0:
                    delete -= 1
                else:
                    ans = s[index] + ans
            index -= 1
        return ans

声明:Hello World|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - LeetCode(2023-11-30)


我的朋友,理论是灰色的,而生活之树是常青的!