LeetCode_47_ValidAnagram


1. question: 有效的字母异位词(简单)

给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。

注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/valid-anagram

示例 1:

1
2
输入: s = "anagram", t = "nagaram"
输出: true

示例 2:

1
2
输入: s = "rat", t = "car"
输出: false

提示:

1
2
1 <= s.length, t.length <= 5 * 104
s 和 t 仅包含小写字母

2. answers

这道题还是比较简单的,采用哈希表来存储每个字符的个数。遍历第一个字符串的时候,增加字符个数,遍历第二个字符串的时候,减少字个数。最后判断哈希表是否还有不为0的字符(如果在遍历的时候,设置好判断条件,其实这一步也可以不用写)。代码如下所示:

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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
public class Solution_0044 {

public static boolean isAnagram(String s, String t) {

if(s.length() != t.length()) return false;

HashMap<Character, Integer> hashMap = new HashMap<>();

char[] chars = s.toCharArray();
char[] chars1 = t.toCharArray();

for(char c: chars) {

Integer integer = hashMap.get(c);
if(integer != null) {
hashMap.put(c, integer + 1);
} else {
hashMap.put(c, 1);
}
}

for(char c: chars1) {
Integer integer = hashMap.get(c);

// 如果不包含该字符,或者该字符数量已经减为0,那么说明字符数量不匹配
if(integer == null || integer == 0) return false;
else {
hashMap.put(c, integer - 1);
}
}

// 最后没必要再判断哈希map是否还有剩余的。因为最开始判断了字符串的长度
// 所以上述确定了字符串长度是一样的,而后的判断中又确定了字符种类是一样的(integer==null)
// 最后由integer==0确定了每个字符的数量是一样的。

return true;
}

public static void main(String[] args) {
System.out.println();

// String s = "anagram";
// String t = "nagaram";

String s = "asdfa";
String t = "asdff";

System.out.println(isAnagram(s, t));
}
}

3. 备注

参考力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 (leetcode-cn.com)代码随想录 (programmercarl.com)


文章作者: 浮云
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 浮云 !
  目录