# Online Assesement 2021-06-14 (Apple) ###### tags: `leetcode` `apple` `assesement` * 兩題題目,一個小時,這兩題我都沒有寫過,但兩題都是 easy ## :memo: 第一題 ![](https://i.imgur.com/bHMy2Ex.png) ## :memo: 題意 * :medal: 我一開始有點誤會題目的意思所以浪費了一點時間,不然應該可以寫更快,題目給你一個 array 裡面有一個以上的單字。 * 他有舉例 ```python= input: ["bella", "label", "roller"] # e 都有出現在各個單字 # l 在各個單字都至少出現兩次,所以答案要給兩個 ll output: ["e", "l", "l"] ``` ## :memo: My solution * :medal: **思考一**: 一定是要遍歷所有 string 的每個 char。 * :medal: **思考二**: 要怎麼紀錄每個 char 在每個單字出現的次數,我原本想用 dicionary,但後來用了 array 的方式去紀錄,用 acsii編碼的方式去紀錄。 ```python= class Solution: def commonChars(self, words: List[str]) -> List[str]: temp = [] for word in words: les = [0] * 26 for char in word: les[ord(char) - ord('a')] += 1 temp.append(les) # zip fuction => list(zip([1,2,3],[4,5,6])) = [(1, 4), (2, 5), (3, 6)] # zip 是去算將每個單字同個的字母出現的次數,集結成同一個 array # *temp => * 解包 record_value = list(zip(*temp)) ans = [] for i,v in enumerate(record_value): # 然後用 min 值去表達 這個字在每個單字中至少出現幾次 for _ in range(min(v)): ans.append(chr(ord('a') + i)) return ans ``` ## :memo: 檢討 * 這個題目要看清楚。 ## :memo: BigO * 時間複雜度: O(len(words)* m),m = 每個字的長度。 * 空間複雜度: O(26* len(words)) ## :memo: 第二題 ![](https://i.imgur.com/rOaM3a9.png) ## :memo: 題意 * :medal: 最多可以分多少個平衡 string。(相同數量的R和L) ## :memo: My solution * :medal: **思考一**: 用一個 forloop 遍歷字串,然後去計算現在有多少個R和L只要數量一樣,ans += 1,然後R和L的計數歸零,重頭開始算。 ```python= class Solution: def balancedStringSplit(self, s: str) -> int: lcount = 0 rcount = 0 ans = 0 for v in s: if v == 'L': lcount += 1 elif v == 'R': rcount += 1 if lcount == rcount: lcount = 0 rcount = 0 ans += 1 return ans ``` ## :memo: BigO * 時間複雜度: O(len(s)) * 空間複雜度: O(1) ## :memo: 真正操作的時間 * 總共 24 分鐘。第一題應該要花更少時間,因為第二題是秒殺題.... ![](https://i.imgur.com/elzl5IO.png)