判断有效的字母异位词(Anagram)
判断字母异位词的核心是确认两字符串字母种类和各字母出现次数完全相同。常用方法是字符计数法(使用长度为26的数组统计小写字母频率)或排序法(排序后比较字符串是否相等)
在字符串处理问题里,字母异位词(Anagram) 是一个很常见的考点。它的定义很简单:
如果两个字符串包含的 字母种类和出现次数完全相同,那么它们就是异位词。
例子:
"listen"和"silent"✅"rat"和"car"❌
常见解法
1. 排序法(O(n log n))
思路:
- 长度不同 → 直接
false。 - 转换成字符数组,排序。
- 比较排序结果。
import java.util.Arrays;
class Solution {
public boolean isAnagram(String s, String t) {
if (s.length() != t.length()) return false;
char[] a = s.toCharArray();
char[] b = t.toCharArray();
Arrays.sort(a);
Arrays.sort(b);
return Arrays.equals(a, b);
}
}
2. 计数法(O(n))
如果只处理 a-z,可以用长度 26 的数组统计频次,更快更省空间。
class Solution {
public boolean isAnagram(String s, String t) {
if (s.length() != t.length()) return false;
int[] count = new int[26];
for (int i = 0; i < s.length(); i++) {
count[s.charAt(i) - 'a']++;
count[t.charAt(i) - 'a']--;
}
for (int c : count) {
if (c != 0) return false;
}
return true;
}
}
应用场景
- 搜索:模糊匹配关键词,
"listen"→ 也能找到"silent"。 - 拼写检查:输入错误单词时,推荐可能的异位词。
- 游戏:文字拼图、Scrabble 这种游戏需要快速判断异位词。
- 安全:简单数据校验,判断是否只是字母顺序不同。