题目:有效的字母异位词
给定两个字符串 s
和 t
,编写一个函数来判断 t
是否是 s
的字母异位词。
注意:若 s
和 t
中每个字符出现的次数都相同,则称 s
和 t
互为字母异位词。
难度:简单
示例 1:
输入: s = “anagram”, t = “nagaram”
输出: true
示例 2:
输入: s = “rat”, t = “car”
输出: false
进阶: 如果输入字符串包含 unicode 字符怎么办?你能否调整你的解法来应对这种情况?
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/valid-anagram
著作权归领扣网络所有。商业转载请联系官方获得授权,非商业转载请注明出处。
解题思路
- 排序
- 哈希表
解题代码
排序
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| class Solution { public boolean isAnagram(String s, String t) { if (s.length() != t.length()){ return false; } char[] s_ch = s.toCharArray(); char[] t_ch = t.toCharArray(); Arrays.sort(s_ch); Arrays.sort(t_ch); for (int i = 0; i < s.length(); i++){ if (s_ch[i] != t_ch[i]){ return false; } } return true; } }
|
哈希表
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| class Solution { public boolean isAnagram(String s, String t) { if (s.length() != t.length()){ return false; } HashMap<Character,Integer> hashMap = new HashMap<>(); for (int i = 0; i < s.length(); i++){ char ch = s.charAt(i); hashMap.put(ch, hashMap.getOrDefault(ch, 0) + 1); } for (int i = 0; i < t.length(); i++){ char ch = t.charAt(i); if (!hashMap.containsKey(ch)){ return false; } hashMap.put(ch, hashMap.get(ch) - 1); } for (Map.Entry<Character,Integer> entry : hashMap.entrySet()){ if (entry.getValue() != 0){ return false; } } return true; } }
|
官方解题代码
排序
1 2 3 4 5 6 7 8 9 10 11 12
| class Solution { public boolean isAnagram(String s, String t) { if (s.length() != t.length()) { return false; } char[] str1 = s.toCharArray(); char[] str2 = t.toCharArray(); Arrays.sort(str1); Arrays.sort(str2); return Arrays.equals(str1, str2); } }
|
哈希表
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| class Solution { public boolean isAnagram(String s, String t) { if (s.length() != t.length()) { return false; } Map<Character, Integer> table = new HashMap<Character, Integer>(); for (int i = 0; i < s.length(); i++) { char ch = s.charAt(i); table.put(ch, table.getOrDefault(ch, 0) + 1); } for (int i = 0; i < t.length(); i++) { char ch = t.charAt(i); table.put(ch, table.getOrDefault(ch, 0) - 1); if (table.get(ch) < 0) { return false; } } return true; } }
|