iT邦幫忙

2024 iThome 鐵人賽

DAY 18
0

242. Valid Anagram

給定兩個字串 st,判斷 t 是否為 s 的Anagram。
Anagram 是指兩個字串中出現的字母相同,且每個字母的出現次數也相同,但順序可以不同。

簡單解法:

class Solution:
    def isAnagram(self, s: str, t: str) -> bool:
        return sorted(s) == sorted(t)

使用hashmap的解法:

class Solution:
    def isAnagram(s: str, t: str) -> bool:
        # 如果兩字串長度不一致,直接回傳 False
        if len(s) != len(t):
            return False
        # 創建一個字典來記錄字母次數
        count = {}
        # 計算 s 中每個字母的次數
        for char in s:
            count[char] = count.get(char, 0) + 1
        # 減少 t 中每個字母的次數
        for char in t:
            if char in count:
                count[char] -= 1
            else:
                return False
        # 最後檢查每個字母的次數是否都為 0
        for value in count.values():
            if value != 0:
                return False
        return True

在Python中使用 Counter 更加精簡的hashmap解法

from collections import Counter
class Solution:
    def isAnagram(s: str, t: str) -> bool:
        return Counter(s) == Counter(t)

202. Happy Number

給定一個正整數 n,重複以下操作:

n 的每一位數,並將每一位數平方後相加,得到新的數字。
重複這個過程,直到該數字變為 1(即 n 是一個「快樂數」)或者無限循環(即不可能變為 1)。
如果這個過程可以變成 1,則返回 True,表示 n 是一個「快樂數」;否則返回 False

class Solution:
    def isHappy(self, n: int) -> bool:
        seen = set()  # 用來儲存已出現過的數字,避免無限循環
        while n != 1 and n not in seen:
            seen.add(n)  # 將當前數字加入集合
            n = sum(int(digit) ** 2 for digit in str(n))  # 計算每個位數的平方和
        return n == 1  # 如果 n 最終變成 1,則返回 True,否則返回 False

解題思路

  1. 計算每個位數的平方和
    • n 的每一位數字,將其平方後相加,並更新 n 的值。
  2. 使用 set 來追蹤重複的數字
    • 為了避免無限迴圈(即進入循環,無法變為 1),我們可以使用一個集合 seen 來記錄已經出現過的數字。
    • 如果某個數字重複出現,表示我們進入了無限循環,可以判斷這個數不是「快樂數」。
  3. 最終判斷
    • n 變為 1 時,返回 True
    • 當發現 n 重複出現在 seen 集合中時,返回 False,表示 n 進入無限循環,不是「快樂數」。

上一篇
[Day17] 關於Hash的刷題筆記(350, 49)
下一篇
[Day19] 關於Hash的刷題筆記(387, 389)
系列文
[30天LeetCode挑戰] 每天一點演算法,讓技巧融會貫通30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言