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));
    }
posted @ 2023-01-09 13:42  AaronTanooo  阅读(18)  评论(0)    收藏  举报