给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。
注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。
输入: s = "anagram", t = "nagaram"
输出: true
输入: s = "rat", t = "car"
输出: false
题目链接:力扣题目链接
class Solution(object):
def isAnagram(self, s, t):
"""
:type s: str
:type t: str
:rtype: bool
"""
record = [0] * 26
# 将26个小写字母映射到0-25
for i in s:
record[ord(i) - ord("a")] += 1
for j in t:
record[ord(j) - ord("a")] -= 1
# 如果record元素不全是0,返回false
for i in range(26):
if record[i] != 0:
return False
return True
from collections import Counter
class Solution(object):
def isAnagram(self, s, t):
"""
:type s: str
:type t: str
:rtype: bool
"""
# 累计每个字母出现的数量
a_count = Counter(s)
b_count = Counter(t)
return a_count == b_count
给定两个数组 nums1 和 nums2 ,返回 它们的交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。
输入:nums1 = [1,2,2,1], nums2 = [2,2]
输出:[2]
输入:nums1 = [4,9,5], nums2 = [9,4,9,8,4]
输出:[9,4]
解释:[4,9] 也是可通过的
题目链接:力扣题目链接
class Solution(object):
def intersection(self, nums1, nums2):
"""
:type nums1: List[int]
:type nums2: List[int]
:rtype: List[int]
"""
record1 = [0] * 1000
record2 = [0] * 1000
result = []
# 将两个数组存入两个哈希表
for i in nums1:
record1[i] = 1
for j in nums2:
record2[j] = 1
# 判断两个哈希表中的值是否同时为1(交集)
for i in range(len(record1)): # 不能写range(10),因为不止0-9这样10个数!
if record1[i] == record2[i] == 1:
result.append(i)
return result
class Solution(object):
def intersection(self, nums1, nums2):
"""
:type nums1: List[int]
:type nums2: List[int]
:rtype: List[int]
"""
record = {}
result = []
for i in nums1:
record[i] = 1
for j in nums2:
if j in record.keys() and record[j] == 1:
result.append(j)
record[j] = 0 # nums2中元素可能重复,不再添加到result里面
return result
编写一个算法来判断一个数 n 是不是快乐数。
「快乐数」 定义为:
对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。
然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。
如果这个过程 结果为 1,那么这个数就是快乐数。
如果 n 是 快乐数 就返回 true ;不是,则返回 false 。
输入:n = 19
输出:true
解释:
12 + 92 = 82
82 + 22 = 68
62 + 82 = 100
12 + 02 + 02 = 1
输入:n = 2
输出:false
题目链接:力扣题目链接
class Solution(object):
def isHappy(self, n):
"""
:type n: int
:rtype: bool
"""
# 计算n的下一个数
def calculatehappy(num):
sum_ = 0
while num:
sum_ += (num % 10) ** 2
num = num // 10
return sum_
# 当record为数组
record = []
while True:
n = calculatehappy(n)
if n == 1:
return True
elif n in record:
return False
record.append(n)
class Solution(object):
def isHappy(self, n):
"""
:type n: int
:rtype: bool
"""
# 计算n的下一个数
def calculatehappy(num):
sum_ = 0
while num:
sum_ += (num % 10) ** 2
num = num // 10
return sum_
# 当record为set
record = set()
while True:
n = calculatehappy(n)
if n == 1:
return True
elif n in record:
return False
record.add(n) # set的插入是add()/数组的插入是append()
分离位数的计算要熟悉!!!
取最右边一位是: n % 10
取剩下的是: n // 10
给一个元素,判断是否出现过,要用哈希表!!!
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。
你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
你可以按任意顺序返回答案。
输入:nums = [2,7,11,15], target = 9
输出:[0,1]
解释:因为 nums[0] + nums[1] == 9 ,返回 [0, 1] 。
输入:nums = [3,2,4], target = 6
输出:[1,2]
输入:nums = [3,3], target = 6
输出:[0,1]
题目链接:力扣题目链接
class Solution(object):
def twoSum(self, nums, target):
"""
:type nums: List[int]
:type target: int
:rtype: List[int]
"""
record = dict()
for i in range(len(nums)):
n = target - nums[i] # 找到需要查找的元素
if n in record:
return [record[n], i]
else:
record[nums[i]] = i
return None
心得:Day5休息,Day6终于刷题速度提上来了, 但是哈希表的数据结构理论有点薄弱, 找时间重新复习一下!