思路
字符a-z的ASCII码是26个连续的数值, a的ascii码为97 - a
相当于 a的下标是
0,
那么a-z都减去a, 那就是0-25, 我们让其数值++
就可以统计出字母a出现次数,
让s字符统一++
, t字符串统一--
最后遍历数组看是否有大于0的下标
有的话就不是异位词
其实我们不需要记住ascii码是多少, 只需要让所以字符对应的ascii存入数组让该下表的数++即可
public boolean isAnagram(String s, String t) {
int[] record = new int[26];
for (int i = 0; i < t.length(); i++) {
record[t.charAt(i) - 'a']++;
}
for (int i = 0; i < s.length(); i++) {
record[s.charAt(i) - 'a']--;
}
for (int i = 0; i < record.length; i++) {
if (record[i] != 0) return false;
}
return true;
}
HashMap<String, Integer> map = new HashMap<String, Integer>();
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
String str = String.valueOf(c);
map.put(str, map.getOrDefault(str,0) + 1);
}
for (int i = 0; i < t.length(); i++) {
char c = t.charAt(i);
String s1 = String.valueOf(c);
map.put(s1, map.getOrDefault(s1, 0) -1);
}
for (int var :map.values()) {
if (var != 0) return false;
}
return true;
}
网友评论