题目描述
给定两个字符串s和t,编写一个函数来判断t是否是s的字母异位词。注意:若s和t中每个字符出现的次数都相同,则称s和t互为字母异位词。
示例 1:
输入:s = "anagram", t = "nagaram"
输出:true
示例 2:
输入:s = "rat", t = "car"
输出:false
题解
Python
时间复杂度 O ( n ) O(n) O(n),空间复杂度 O ( 1 ) O(1) O(1):
class Solution:
def isAnagram(self, s: str, t: str) -> bool:
records = dict() # 用于记录每个字母出现的次数
for i in s:
if i in records:
records[i] = records[i] + 1 # s中每出现一次对应value就加一
else:
records[i] = 1
for i in t:
if i in records:
records[i] = records[i] - 1 # t中每出现一次对应value就减一
else:
return False # t中有s中未出现过的字母
for i in records:
if records[i] != 0: # 二者互为字母异位词时字典中所有的value都应为0
return False
return True
C
时间复杂度 O ( n ) O(n) O(n),空间复杂度 O ( 1 ) O(1) O(1):
bool isAnagram(char *s, char *t){
int records[26] = {
0}; # 借助于ascii码将字符映射到数组中
for (int i = 0; s[i] != 0; ++i) {
++records[s[i] - 97];
}
for (int i = 0; t[i] != 0; ++i) {
--records[t[i] - 97];
}
for (int i = 0; i < 26; ++i) {
if (records[i] != 0) return false;
}
return true;
}