题目描述
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。
示例1:
输入: s = “anagram”, t = “nagaram”
输出: true
示例2:
输入: s = “rat”, t = “car”
输出: false
说明:
你可以假设字符串只包含小写字母。
题解
理解上,主要的哈希更多指的是对应关系,不一定拘泥于某种特定的数据结构。本题主要使用了哈希法和排序法。
哈希法(java)
思路:由于全部的可能空间不是很大,所以考虑用哈希表的方法,维护一个有所有字母位置的数组,原数组遇某字母加一,目标数组遇到某字母减一。最后检查数组元素是否都为零。
public boolean isAnagram(String s, String t) {
if (s.length() != t.length()) {
return false;
}
int[] counter = new int[26];
for (int i = 0; i < s.length(); i++) {
counter[s.charAt(i) - 'a']++;
counter[t.charAt(i) - 'a']--;
}
for (int count : counter) {
if (count != 0) {
return false;
}
}
return true;
}
复杂度分析
- 时间复杂度:O(n)
- 空间复杂度:O(1)
排序法(java)
思路:直接将两个字符串转化为数组后排序,然后检查一致与否。
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);
}
- 时间复杂度:O(n)
- 空间复杂度:O(n)