https://leetcode.cn/problems/valid-anagram/

题面

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

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

思路① 暴力,两层for,时间O(n^2)

思路② 数组+哈希,时间O(n),空间O(1)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public boolean isAnagram(String s, String t) {
int[] record = new int[26];

for (int i = 0; i < s.length(); i++) {
record[s.chatAt(i) - 'a']++; // 不需要记住字符a的ASCII,求出相对数组就行
}

for (int i = 0; i < t.length(); i++) {
record[t.chatAt(i) - 'a']--;
}

for (int count : record) {
if (count != 0) { // record数组如果有元素不为0,说明s和t一定是谁多了或少了字符
return false;
}
}
return true; // record数组所有元素都为0,说明字符串s和t是字母异位词
}