1. 程式人生 > 實用技巧 >標準maven配置setting檔案

標準maven配置setting檔案

1、劍指 Offer 50. 第一個只出現一次的字元

考點:

class Solution:
    def firstUniqChar(self, s: str) -> str:
        ch_dict = {}
        for i in range(len(s)):
            cur = s[i]
            if cur in s[:i]:
                continue
            if not cur in s[i+1:]:
                return cur
        return " "

2、劍指 Offer 03. 陣列中重複的數字

考點:

class Solution:
    def findRepeatNumber(self, nums: List[int]) -> int:
        n = len(nums)
        nums.sort()
        for i in range(1, n):
            if nums[i] == nums[i-1]:
                return nums[i]

3、面試題 10.02. 變位片語

class Solution:
    def groupAnagrams(self, strs: List[str]) -> List[List[str]]:
        result_dict = collections.defaultdict(list)
        for istr in strs:
            istr_list = list(istr)
            istr_list.sort()
            # print("".join(istr_list))
            result_dict["".join(istr_list)].append(istr)
        result = []
        for _, values in result_dict.items():
            result.append(values)
        return result

4、面試題 16.02. 單詞頻率

class WordsFrequency:

    def __init__(self, book: List[str]):
        
        self.word_fre = {}
        for word in book:
            if word in self.word_fre:
                self.word_fre[word] = self.word_fre[word] + 1
            else:
                self.word_fre[word] = 1

    def get(self, word: str) -> int:
        return self.word_fre.get(word, 0)

5、劍指 Offer 48. 最長不含重複字元的子字串
考點:

1、注意雙指標的序列長度要>=2,等於0和1 需要使用特殊值處理

2、for 迴圈right指標,range範圍是(1, len(s)+1)

class Solution:
    def lengthOfLongestSubstring(self, s: str) -> int:
        if len(s) == 0:
            return 0
        
        if len(s) == 1:
            return 1
        

        result = 0
        left = 0 
        for right in range(1, len(s)+1):
            # print(s[left:right])
            # 不重複
            if len(set(s[left:right])) == right - left:
                if right - left > result:
                    result = right - left
                continue
            
            # 重複
            while True:
                left = left + 1
                if left == right:
                    break
                if len(set(s[left:right])) == right - left:
                    if right - left > result:
                        result = right - left
                    break
        return result

6、726. 原子的數量