赞
踩
题目链接: https://leetcode.cn/problems/valid-anagram/
视频题解: https://www.bilibili.com/video/BV1db421J7qK/
给定两个字符串 s
和 t
,编写一个函数来判断 t
是否是 s
的字母异位词。
注意: 若 s
和 t
中每个字符出现的次数都相同,则称 s
和 t
互为字母异位词。
举个例子:
输入: s = "anagram", t = "nagaram"
输出: true
分别对s
和t
进行排序,然后比较排序后的字符串是否相等。
class Solution {
public:
bool isAnagram(string s, string t) {
sort(s.begin(), s.end());
sort(t.begin(), t.end());
return s == t;
}
};
class Solution {
public boolean isAnagram(String s, String t) {
char[] sArray = s.toCharArray();
char[] tArray = t.toCharArray();
Arrays.sort(sArray);
Arrays.sort(tArray);
return Arrays.equals(sArray, tArray);
}
}
class Solution:
def isAnagram(self, s: str, t: str) -> bool:
return sorted(s) == sorted(t)
时间复杂度: 快排的时间复杂度是O(nlogn),其中n
是字符串的长度。
空间复杂度: 快排的空间复杂度是O(logn)。
假设s = "anagram"
, t = "nagaram"
。
hash
表u_mapS
用来统计s
中字符出现的次数,u_mapT
用来统计t
中字符出现的次数。hash
表中的元素是否相等。class Solution { public: bool isAnagram(string s, string t) { int s_len = s.length(); int t_len = t.length(); if (s_len != t_len) return false; //保存s中字符出现的次数 unordered_map<char, int> u_mapS; //保存t中字符出现的次数 unordered_map<char, int> u_mapT; for (int i = 0; i < s_len; ++i) { u_mapS[s[i]]++; u_mapT[t[i]]++; } for (int i = 0; i < s_len; ++i) { if (u_mapS[s[i]] != u_mapT[s[i]]) return false; } return true; } };
class Solution { public boolean isAnagram(String s, String t) { int s_len = s.length(); int t_len = t.length(); if (s_len != t_len) return false; //保存s中字符出现的次数 Map<Character, Integer> u_mapS = new HashMap<>(); //保存t中字符出现的次数 Map<Character, Integer> u_mapT = new HashMap<>(); for (int i = 0; i < s_len; ++i) { u_mapS.put(s.charAt(i), u_mapS.getOrDefault(s.charAt(i), 0) + 1); u_mapT.put(t.charAt(i), u_mapT.getOrDefault(t.charAt(i), 0) + 1); } for (int i = 0; i < s_len; ++i) { if (!u_mapS.getOrDefault(s.charAt(i), 0).equals(u_mapT.getOrDefault(s.charAt(i), 0))) return false; } return true; } }
class Solution: def isAnagram(self, s: str, t: str) -> bool: s_len = len(s) t_len = len(t) if s_len != t_len: return False #保存s中字符出现的次数 u_mapS = defaultdict(int) #保存t中字符出现的次数 u_mapT = defaultdict(int) for i in range(s_len): u_mapS[s[i]] += 1 u_mapT[t[i]] += 1 for i in range(s_len): if u_mapS[s[i]] != u_mapT[s[i]]: return False return True
时间复杂度: 只需要遍历两遍字符串,哈希表的存取都是常量的时间复杂度,所以时间复杂度为O(n),其中n
是字符串的长度。
空间复杂度: 需要使用两个hash
表,所以空间复杂度为O(n),其中n
是字符串的长度。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。