Long大小比较的问题

【背景描述】

今天使用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(), 否则可能会有问题。

 


版权声明:本文为steven_bill原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。