【背景描述】
今天使用Leecode刷题时,遇到一个问题,两个Long型的整数比较大小,a = 1913L,b = 1913L ,我使用a == b判断时,是false。查了一些资料后,发现不能这样比较。如果要使用==进行比较的话,需要将Long转成基本类型long,例如:a.longValue() == b.longValue()。或者使用Long.compare(a,b) == 0。
具体可以参考博客:https://blog.csdn.net/zhsh5395/article/details/80622757
【Leecode题目】
https://leetcode-cn.com/problems/valid-anagram/
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。
示例 1:
输入: s = "anagram", t = "nagaram"
输出: true
示例 2:
输入: s = "rat", t = "car"
输出: false
说明:
你可以假设字符串只包含小写字母。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/valid-anagram
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
class Solution {
public boolean isAnagram(String s, String t) {
if (s.length() != t.length()) return false;
Map<Character,Long> sMap = getCharMap(s);
Map<Character,Long> tMap = getCharMap(t);
if (sMap.size() != tMap.size()) {
return false;
}
for (Character c : sMap.keySet()) {
if (!tMap.containsKey(c) || Long.compare(tMap.get(c), sMap.get(c)) != 0) {
return false;
}
}
return true;
}
private Map<Character,Long> getCharMap(String str) {
Map<Character,Long> charMap = new HashMap<>();
for (int i = 0; i < str.length(); i++) {
Character c = str.charAt(i);
if (charMap.containsKey(c)) {
charMap.put(c,charMap.get(c) + 1);
} else {
charMap.put(c,1L);
}
}
return charMap;
}
}我的总结:
1.边界值判断:如果两个字符串长度不相等,那么结果肯定是false;
2.使用HashMap存储时,key要使用java封装类型,char封装类型是Character;
3.题目中字符串的长度并没有说,所以要使用Long;
4.Long型比较最好用Long.compare(a,b) == 0, 或者a.longValue() = b.longValue(), 否则可能会有问题。