242. 有效的字母异位词 - 力扣(LeetCode) (leetcode-cn.com)
英文字母总共就26个,创建一个长度26的整数数组,记录单词中每个字母出现的次数。
不需要创建两个数组,第一个单词加第二个单词减,最后如果数组全部归零就说明是字母异位词。
class Solution {
public boolean isAnagram(String s, String t) {
if (s.length() != t.length())
return false;
int[] counts = new int[26];
for (char c : s.toCharArray()) {
counts[c - 'a']++;
}
for (char c : t.toCharArray()) {
counts[c - 'a']--;
}
for (int i:counts){
if(i!=0)
return false;
}
return true;
}
}
但是如果不只有字母,还有各种字符的话,就需要用到Map了。
class Solution {
public boolean isAnagram(String s, String t) {
if (s.length() != t.length())
return false;
Map<Character, Integer> map = new HashMap<>();
for (char c : s.toCharArray()) {
if (map.containsKey(c)) {
map.put(c, map.get(c) + 1);
} else {
map.put(c, 1);
}
}
for (char c : t.toCharArray()) {
if (!map.containsKey(c))
return false;
else {
map.put(c, map.get(c) - 1);
}
}
for (char c : map.keySet()) {
if (map.get(c) != 0)
return false;
}
return true;
}
}
看见一个Python的骚操作,一行解决。
class Solution(object):
def isAnagram(self, s, t):
return sorted(s) == sorted(t)