242. Valid Anagram [Easy]
242. Valid Anagram
Given two strings s and t, return true if t is an anagram of s, and false otherwise.
An Anagram is a word or phrase formed by rearranging the letters of a different word or phrase, typically using all the original letters exactly once.
Constraints:
- 1 <= s.length, t.length <= 5 * 104
 - s and t consist of lowercase English letters.
 
Example
Input: s = "anagram", t = "nagaram"
Output: true
思路
- 无脑:比较一个字符串中每一个字符是否是另外一个字符串拥有的,没有就返回
 - 想一想:本质上就是看两个字符串所组成的字符个数是否相等,如果相等那无论怎么重排序都能满足条件 (出现次数 -> HahMap)
 - Tricky:题目限制中,提到了字符串只会由小写都英文字符字母组成,而小写英文字母ASCII码在97-122之间,那可以利用这一点直接把两个字符串排序,然后只要比较一下两个数组是否相等就完事了
 
题解
- 无脑
 
        if (s.length() != t.length())
            return false;
	// 把其中字符串转成List,
        List<String> data = new ArrayList(Arrays.asList(s.split("")));
	// O(n)
        for (char val : t.toCharArray()) {
	    // 集合中 String 不能直接和 Char 做比较,先转成String
            String cur = String.valueOf(val);
	    // O(n) 所以总的就是O(n^2) 三种里面时间复杂度最高
            if (!data.contains(cur))
                return false;
            data.remove(cur);
        }
        return data.isEmpty();
- 想一想
 
    public boolean isAnagram(String s, String t) {
	// 如果长度不等肯定不满足条件,直接返回
        if (s.length() != t.length())
            return false;
        HashMap<Character, Integer> sMap = new HashMap<>();
        HashMap<Character, Integer> tMap = new HashMap<>();
        char[] sChar = s.toCharArray();
        char[] tChar = t.toCharArray();
	// 因为做了长度判断,所以长度一定是相等的,那一次for就够了,统计两个字符串中每个字符出现的次数
	// O(n)
        for (int i = 0; i < sChar.length; i++) {
            sMap.put(sChar[i], sMap.getOrDefault(sChar[i], 0) + 1);
            tMap.put(tChar[i], tMap.getOrDefault(tChar[i], 0) + 1);
        }
	// 这里用的是包装类,已经重写过equals和hashcode了,如果是自定义类别忘了重写!
        return sMap.equals(tMap);
    }
}
- Trickey
 
    public boolean isAnagram(String s, String t) {
        if (s.length() != t.length())
            return false;
        char[] sChar = s.toCharArray();
        char[] tChar = t.toCharArray();
	// O (nlogn)
        Arrays.sort(sChar);
        Arrays.sort(tChar);
	// 可别直接用char[]来equals比较,基本类型没有重写,比不了的,转String做比较
        return Arrays.toString(sChar).equals(Arrays.toString(tChar));
    }

                
            
        
浙公网安备 33010602011771号