📝个人主页:五敷有你
🔥系列专栏:算法分析与设计
⛺️稳中求进,晒太阳
题目
给定两个字符串
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<s.length();i++){arr[s.charAt(i)-'a']++;}for(int i=0;i<t.length();i++){arr[t.charAt(i)-'a']--;}for(int i=0;i<26;i++){if(arr[i]!=0)return false;}return true;}
}
运行结果
进阶
如果输入字符串包含 unicode 字符怎么办?你能否调整你的解法来应对这种情况?
思路
针对包含Unicode字符的情况,我们需要一种通用的方法来记录字符频率。一种简单有效的方法是使用一个哈希表,其中键是字符,值是该字符在字符串中出现的次数。我们可以遍历字符串,将字符及其出现的次数记录在哈希表中。然后,我们比较两个字符串的哈希表,如果它们相同,则说明两个字符串是字母异位词。
具体步骤如下:
- 初始化两个哈希表,分别用于记录两个字符串中字符的出现次数。
- 遍历第一个字符串,将字符及其出现次数记录在第一个哈希表中。
- 遍历第二个字符串,将字符及其出现次数记录在第二个哈希表中。
- 检查两个哈希表是否相同,如果相同则返回true,否则返回false。
这种方法可以处理包含Unicode字符的情况,因为哈希表可以处理任何字符类型的键。
代码实现
class Solution {public boolean isAnagram(String s, String t) {if (s.length() != t.length()) {return false;}// 初始化两个哈希表,用于存储字符频率Map<Character, Integer> freqS = new HashMap<>();Map<Character, Integer> 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);}
}