給定兩個字串 s
和 t
,判斷 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)
給定一個正整數 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
解題思路
n
的每一位數字,將其平方後相加,並更新 n
的值。1
),我們可以使用一個集合 seen
來記錄已經出現過的數字。n
變為 1
時,返回 True
n
重複出現在 seen
集合中時,返回 False
,表示 n
進入無限循環,不是「快樂數」。