个人主页:五敷有你
系列专栏:算法分析与设计
⛺️稳中求进,晒太阳
给定两个字符串
s
和t
,编写一个函数来判断t
是否是s
的字母异位词。注意:若
s
和t
中每个字符出现的次数都相同,则称s
和t
互为字母异位词。
示例 1:
输入: s = "anagram", t = "nagaram" 输出: true
示例 2:
输入: s = "rat", t = "car" 输出: false
首先判断两个字符串长度是否相等,不相等则直接返回 false
若相等,则初始化 26 个字母哈希表,遍历字符串 s 和 t
s 负责在对应位置增加,t 负责在对应位置减少
如果哈希表的值都为 0,则二者是字母异位词
class Solution {
public boolean isAnagram(String s, String t) {
int[] arr=new int[26];
for(int i=0;i
如果输入字符串包含 unicode 字符怎么办?你能否调整你的解法来应对这种情况?
针对包含Unicode字符的情况,我们需要一种通用的方法来记录字符频率。一种简单有效的方法是使用一个哈希表,其中键是字符,值是该字符在字符串中出现的次数。我们可以遍历字符串,将字符及其出现的次数记录在哈希表中。然后,我们比较两个字符串的哈希表,如果它们相同,则说明两个字符串是字母异位词。
具体步骤如下:
这种方法可以处理包含Unicode字符的情况,因为哈希表可以处理任何字符类型的键。
class Solution {
public boolean isAnagram(String s, String t) {
if (s.length() != t.length()) {
return false;
}
// 初始化两个哈希表,用于存储字符频率
Map freqS = new HashMap<>();
Map freqT = new HashMap<>();
// 计算字符串s的字符频率
for (char c : s.toCharArray()) {
freqS.put(c, freqS.getOrDefault(c, 0) + 1);
}
// 计算字符串t的字符频率
for (char c : t.toCharArray()) {
freqT.put(c, freqT.getOrDefault(c, 0) + 1);
}
// 检查两个哈希表是否相同
return freqS.equals(freqT);
}
}